美文网首页
Android 代码

Android 代码

作者: Cloverss | 来源:发表于2017-05-17 15:16 被阅读16次

    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
                }
            }
        }
    

    相关文章

      网友评论

          本文标题:Android 代码

          本文链接:https://www.haomeiwen.com/subject/rrpdxxtx.html