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

本文介绍了一个自定义的RecyclerView适配器BaseListAdapter及其实现RecyleViewAdapter,包括如何加载数据、设置布局和处理点击事件。同时,还提供了一个自定义的点击监听器OnRecyclerItemClickListener。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基类: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

效果图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值