Android 代码
2017-05-17 本文已影响16人
Cloverss
1.RecycleView的BaseAdapter 和 ViewHolder
2.Handler的正确写法
1.BaseAdp
public abstract class BaseAdp<T> extends RecyclerView.Adapter<BaseHolder> {
private Context context;
private List<T> data;
private int layoutId;
public BaseAdp(Context context, List<T> data, int layoutId) {
this.context = context;
this.data = data;
this.layoutId = layoutId;
}
public List<T> getData() {
return data;
}
public void setData(List<T> data) {
this.data = data;
}
@Override
public BaseHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return BaseHolder.getHolder(context, parent, layoutId);
}
@Override
public void onBindViewHolder(BaseHolder holder, int position) {
this.onBind(holder, data.get(position), position);
}
@Override
public int getItemCount() {
return data == null ? 0 : data.size();
}
public abstract void onBind(BaseHolder baseHolder, T t, int position);
}
BaseHolder
public class BaseHolder extends RecyclerView.ViewHolder {
private View itemView;
private SparseArray<View> views;
public BaseHolder(View itemView) {
super(itemView);
this.itemView = itemView;
views = new SparseArray<>();
}
public static <T extends BaseHolder> T getHolder(Context context, ViewGroup parent, int layouId) {
return (T) new BaseHolder(LayoutInflater.from(context).inflate(layouId, parent, false));
}
public <T extends View> T getView(int viewId) {
View childView = views.get(viewId);
if (null == childView) {
childView = itemView.findViewById(viewId);
views.put(viewId, childView);
}
return (T) childView;
}
public BaseHolder setOnClickListener(int viewId, View.OnClickListener listener) {
View view = getView(viewId);
view.setOnClickListener(listener);
return this;
}
}
使用范例
public class ScanHdAdp extends BaseAdp<FormConfig> implements View.OnClickListener {
private Constant.OnRvClickListener mOnRvClickListener = null;
public void setOnItemClickListener(Constant.OnRvClickListener listener) {
this.mOnRvClickListener = listener;
}
public ScanHdAdp(Context context, List<FormConfig> data, int layoutId) {
super(context, data, layoutId);
}
@Override
public void onBind(BaseHolder baseHolder, FormConfig formConfig, int position) {
TextView lbName = baseHolder.getView(R.id.item_other_tv);
EditText lbEd = baseHolder.getView(R.id.item_other_ed);
Button lbBtn = baseHolder.getView(R.id.item_other_btn);
lbName.setText(formConfig.getLbName());
if (!formConfig.getCanModify()) {
lbEd.setEnabled(false);
}
if (formConfig.getReferType() == 0) {
lbBtn.setVisibility(View.INVISIBLE);
}
lbBtn.setOnClickListener(this);
lbBtn.setTag(position);
}
@Override
public void onClick(View v) {
if (mOnRvClickListener != null) {
mOnRvClickListener.OnItemClick(v, (Integer) v.getTag());
}
}
}
2.Handler 的正确写法 (静态内部类+弱引用)
private static class MyHandler extends Handler {
WeakReference<MainActivity> weakReference = null;
public MyHandler(MainActivity activity) {
this.weakReference = new WeakReference<>(activity);
}
@Override
public void handleMessage(Message msg) {
MainActivity mainActivity = weakReference.get();
if (null != mainActivity){
// to do something
}
}
}