Android 代碼

1.RecycleView的BaseAdapter 和 ViewHolder
2.Handler的正確寫(xiě)法

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 的正確寫(xiě)法 (靜態(tài)內(nèi)部類+弱引用)

    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
            }
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 什么是代碼混淆 代碼混淆就是將代碼中的各種元素,如變量,方法,類和包的名字改寫(xiě)成無(wú)意義的名字,增加項(xiàng)目反編譯后被讀...
    蝸牛家族史閱讀 5,215評(píng)論 1 4
  • 畢業(yè)工作也有幾年了,從開(kāi)始學(xué)習(xí)寫(xiě)代碼的時(shí)候就沒(méi)有養(yǎng)成好的代碼習(xí)慣,野路子起家,但是隨著工作的深入,越發(fā)感覺(jué),代碼的...
    mymdeep閱讀 575評(píng)論 0 4
  • http://www.zhihu.com/question/27227425/answer/35973793 來(lái)源...
    tikistyle閱讀 307評(píng)論 0 0
  • 前言 為了使垃圾回收器可以正常釋放程序所占用的內(nèi)存,在編寫(xiě)代碼的時(shí)候就一定要注意盡量避免出現(xiàn)內(nèi)存泄漏的情況(通常都...
    Gracker閱讀 6,202評(píng)論 1 32