recyclerview의 adapter 코드 최적화
코드에 데이터 binding 사용
BaseAdapter.java
package com.yiba.oops.utils;
import android.content.Context;
import android.databinding.ViewDataBinding;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import com.yiba.oops.APP;
import java.util.ArrayList;
import java.util.List;
/** * Created by Administrator on 2016/9/1. * READ ME * recyclerview adapter viewholder , binding item , */
public abstract class BaseAdapter<T> extends RecyclerView.Adapter<BaseAdapter.BaseViewHolder> {
protected List<T> mList = new ArrayList<>();
protected Context mContext;
private OnRecyclerItemClickListener mOnRecyclerItemClickListener;
public interface OnRecyclerItemClickListener {
boolean onRecyclerItemClick(RecyclerView.ViewHolder holder, View view, int position);
}
public BaseAdapter(List<T> list) {
mContext = APP.getContext();
mList = list;
}
@Override
public BaseAdapter.BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
ViewDataBinding binding = getBinding(parent, viewType);
return new BaseViewHolder(binding);
}
/** * binding */
protected abstract ViewDataBinding getBinding(ViewGroup parent, int viewType);
@Override
public void onBindViewHolder(BaseAdapter.BaseViewHolder holder, int position) {
onBindingViewHolder(holder, position);
}
/** * viewholder **/
protected abstract void onBindingViewHolder(BaseAdapter.BaseViewHolder holder, int position);
@Override
public int getItemCount() {
return mList == null ? 0 : mList.size();
}
public void setOnRecyclerItemClickListener(OnRecyclerItemClickListener onRecyclerItemClickListener) {
mOnRecyclerItemClickListener = onRecyclerItemClickListener;
}
public class BaseViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private ViewDataBinding binding;
public BaseViewHolder(View itemView) {
super(itemView);
initListener();
}
public BaseViewHolder(ViewDataBinding binding) {
super(binding.getRoot());
this.binding = binding;
initListener();
}
private void initListener() {
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (mOnRecyclerItemClickListener != null) {
mOnRecyclerItemClickListener.onRecyclerItemClick(this, view, getAdapterPosition());
}
}
public ViewDataBinding getBinding() {
return binding;
}
}
}
사용:
예:
ShareAdapter.java
/** * Created by ${xiaopao} on 2016/9/7. */
public class ShareAdapter extends BaseAdapter<ShareFriends> {
//BaseAdapter<ShareFriends>
// BaseAdapter,<ShareFriends> item
public ShareAdapter(List<ShareFriends> list) {
super(list);
}
@Override
protected ViewDataBinding getBinding(ViewGroup parent, int viewType) {
// databinding
return DataBindingUtil.inflate(
LayoutInflater.from(mContext),
R.layout.item_share_friends,
parent,
false
);
}
// item
@Override
protected void onBindingViewHolder(BaseAdapter.BaseViewHolder holder, final int position) {
final ShareItemBinding sharebinding = (ShareItemBinding) holder.getBinding();
ShareFriends f = mList.get(position);
// LogUtil.HDLog("name:" + f.getName() + " icon: " + f.getIcon());
String iconurl = f.getIcon();
String name = f.getName();
sharebinding.shareName.setText(name);
Glide.with(mContext)
.load(iconurl)
.transform(new GlideCircleTransform(mActivity))
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.crossFade()
.into(sharebinding.shareImg);
if (mList.get(position).isChecked()) {
sharebinding.shareCheck.setImageResource(R.drawable.selected);
} else {
sharebinding.shareCheck.setImageResource(R.drawable.unseleted);
}
}
}
클릭 이벤트를 추가하려면://setOnRecyclerItemClickListener를 설정하면 됩니다.
adapter.setOnRecyclerItemClickListener(new BaseAdapter.OnRecyclerItemClickListener() {
@Override
public boolean onRecyclerItemClick(RecyclerView.ViewHolder holder, View view, int position) {
if (sharelist.get(position).isChecked()) {
sharelist.get(position).setChecked(false);
} else {
sharelist.get(position).setChecked(true);
}
adapter.notifyDataSetChanged();
return true;
}
});
BaseAdapter.java는 프로젝트에 복사해서 직접 사용할 수 있습니다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
깨끗한 것을 보고 싶기 때문에 최적화 함수의 벤치마크에 이용되는 함수의 가시화를 해 보았다결정되지 않음 (자기 만족) 「헤이 이런 거 있어」라고 생각하는 사람 최적화 함수란? 거친 이미지로 1) x + 10 = 25 2) x + 60 = 15 3) x + 45 = 60 의 x를 기계에 구할 때 정확하게 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.