RecycleView(BaseViewHolder+BaseAdapter+不同类型适配+点击事件)

来源:互联网 发布:淘宝企业店铺公司更改 编辑:程序博客网 时间:2024/06/15 20:40

基类:BaseListAdapter

public abstract class BaseListAdapter<M, VH extends RecyclerView.ViewHolder> extends RecyclerView        .Adapter<VH> {    protected List<M> list;    protected Context context;    public BaseListAdapter(Context context, List<M> list, View v) {        this.context = context;        this.list = list;    }    @Override    public int getItemCount() {        Log.d("BaseListAdapter", "getItemCount: " + list.size());        return list.size();    }    protected M getItem(int position) {        return list.get(position);    }}

实现类 :RecyleViewAdapter

public class RecyleViewAdapter extends BaseListAdapter<Student, RecyleViewAdapter.ViewHolder> {    public RecyleViewAdapter(Context context, List<Student> list, View v) {        super(context, list,v);    }    @Override    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        ViewHolder viewHolder = new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R                .layout                .item_recycle, parent, false));        return viewHolder;    }    @Override    public void onBindViewHolder(ViewHolder holder, int position) {        String name = null;        switch (getItemViewType(position)) {            case 0:                name = list.get(position).getName();                break;            case 1:                name = "heheheheheheheh";                break;        }        holder.studentName.setText(name);    }    @Override    public int getItemViewType(int position) {        if (0 == list.get(position).getFlag()) {            return 0;        } else if (1 == list.get(position).getFlag()) {            return 1;        }        return 0;    }    class ViewHolder extends RecyclerView.ViewHolder {        TextView studentName;        public ViewHolder(View itemView) {            super(itemView);            studentName = itemView.findViewById(R.id.studentName);        }    }}

Listener:

public abstract class OnRecyclerItemClickListener extends RecyclerView.SimpleOnItemTouchListener {    private GestureDetectorCompat mGestureDetectorCompat;    private RecyclerView recyclerView;    public OnRecyclerItemClickListener(final RecyclerView recyclerView) {        this.recyclerView = recyclerView;        mGestureDetectorCompat = new GestureDetectorCompat(recyclerView.getContext(), new                GestureDetector.SimpleOnGestureListener() {                    @Override                    public boolean onSingleTapUp(MotionEvent e) {                        View childView = recyclerView.findChildViewUnder(e.getX(), e.getY());                        if (childView != null) {                            RecyclerView.ViewHolder viewHolder = recyclerView.getChildViewHolder                                    (childView);                            onItemClick(viewHolder);                        }                        return true;                    }                    @Override                    public void onLongPress(MotionEvent e) {                        View childView = recyclerView.findChildViewUnder(e.getX(), e.getY());                        if (childView != null) {                            RecyclerView.ViewHolder viewHolder = recyclerView.getChildViewHolder                                    (childView);                            onItemLongClick(viewHolder);                        }                    }                });    }    @Override    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {        mGestureDetectorCompat.onTouchEvent(e);        return false;    }    public abstract void onItemClick(RecyclerView.ViewHolder v);    public abstract void onItemLongClick(RecyclerView.ViewHolder v);}

基类Activity:

public abstract class BaseActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        initVariables();        initView(savedInstanceState);        loadData();    }    protected void initVariables() {};    protected void initView(Bundle savedInstanceState) {};    protected void loadData() {};}

具体实现:RecycleViewActivity

public class RecycleViewActivity extends BaseActivity {    @Nullable    @BindView(R.id.recycleView)    RecyclerView recyclerView;    List<Student> list;    @Override    protected void initView(Bundle savedInstanceState) {        setContentView(R.layout.activity_recycle_view);        ButterKnife.bind(this);        Log.d("RecycleViewActivity", "initView: " + recyclerView);    }    @Override    protected void initVariables() {        initData();    }    @Override    protected void loadData() {        recyclerView.setLayoutManager(new LinearLayoutManager(this));        Log.d("RecycleViewActivity", "loadData: " + list);        recyclerView.setAdapter(new RecyleViewAdapter(this, list, null));        recyclerView.addOnItemTouchListener(new OnRecyclerItemClickListener(recyclerView ) {            @Override            public void onItemClick(RecyclerView.ViewHolder v) {                Toast.makeText(RecycleViewActivity.this, "点击了" + v.getLayoutPosition(), Toast                        .LENGTH_SHORT).show();            }            @Override            public void onItemLongClick(RecyclerView.ViewHolder v) {                Toast.makeText(RecycleViewActivity.this, "长按了" + v.getLayoutPosition(), Toast                        .LENGTH_SHORT).show();            }        });    }    @Override    protected void onDestroy() {        super.onDestroy();        ButterKnife.bind(this).unbind();    }    protected void initData() {        list = new ArrayList<Student>();        for (int i = 0; i < 30; i++) {            Student student = new Student();            student.setName("学生" + i);            Random random = new Random();            int a = random.nextInt(2);            Log.d("RecycleViewActivity", "initData: " + a);            student.setFlag(a);            list.add(student);        }    }}

github地址:https://github.com/hushendian/RecycleViewDemo.git

效果图:
这里写图片描述

原创粉丝点击