【Android开发经验】-- 如何实现RecyclerView子项的点击事件?

文章介绍了如何在RecyclerView中实现点击图标切换功能,并通过SQLite数据库存储点击状态,以实现页面刷新后仍能保持用户操作的状态。具体步骤包括在适配器的onCreateViewHolder方法中设置点击事件,根据点击状态更新ImageView的资源,以及使用ContentValues和SQLiteDatabase接口更新数据库记录。

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

目录

实例

实现思路

实现代码

进一步需求:数据库存储


实例

        假设现在需要完成一个以下需求的任务,下面两个图左边是点击前未完成,右边是点击后已完成,如何实现点击图标切换另一个图标?(矩形框中的内容是RecyclerView实现,每一行的文字和图标部分是RecyclerView的子项)

            

 

实现思路

        在适配器adapter类中的onCreateViewHold方法中为ImageView视图注册点击事件,

        通过 holder.getAbsoluteAdapterPosition() 方法获取点击的子项,通过子项拿到对应的类的实例,

        然后判断点击的ImageView视图是完成还是未完成,例:如果是完成状态,则改变显示图标为未完成且修改实例里保存的图标为未完成。

 

实现代码

        RecyclerView适配器类中实现如下代码,其中isFinish为获取的图标视图(isFinish = (ImageView) view.findViewById(R.id.isFinish);)

        plans为自己的需求定义的类,list为传入适配器的列表。

 public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item2,parent,false);
        final ViewHolder holder = new ViewHolder(view);

        holder.isFinish.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
            int position = holder.getAbsoluteAdapterPosition();
            plans status = list.get(position);
            if (status.getIsFinish() == R.drawable.finish){
                holder.isFinish.setImageResource(R.drawable.unfinish);
                status.setIsFinish(R.drawable.unfinish);
            }else{
                holder.isFinish.setImageResource(R.drawable.finish);
                status.setIsFinish(R.drawable.finish);

            }
}

 

进一步需求:数据库存储

        以上实现了静态页面,点击会切换图标,但是退出页面再进入时会回到原始状态,那么如何实现记忆存储?下面使用SQLite数据库存储实现,不会使用可参考此文章

        由完成状态转变为未完成状态时,修改数据库中的字段isFinish为0,字段isFinish来保存是否完成,0表示未完成,1表示已完成。下次加载此页面时就可以根据字段来判断显示完成还是未完成状态了。

public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item2,parent,false);
        final ViewHolder holder = new ViewHolder(view);
        dbHelper = new MyDatabaseHelper(parent.getContext(), "MyPlans.db", null, 5);

        holder.isFinish.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int position = holder.getAbsoluteAdapterPosition();
                Plans status = list.get(position);

                dbHelper.getWritableDatabase();
                SQLiteDatabase db = dbHelper.getWritableDatabase();
                ContentValues values = new ContentValues();

                if (status.getIsFinish() == R.drawable.finish){
                    holder.isFinish.setImageResource(R.drawable.unfinish);
                    status.setIsFinish(R.drawable.unfinish);
                    values.put("isFinish",0);
                }else{
                    holder.isFinish.setImageResource(R.drawable.finish);
                    status.setIsFinish(R.drawable.finish);
                    values.put("isFinish",1);
                }
                db.update("Status",values,"content = ?",new String[] {status.getText()});

            }
        });

        return holder;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

四月天行健

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值