当前位置: 首页 > article >正文

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

目录

实例

实现思路

实现代码

进一步需求:数据库存储


实例

        假设现在需要完成一个以下需求的任务,下面两个图左边是点击前未完成,右边是点击后已完成,如何实现点击图标切换另一个图标?(矩形框中的内容是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;
    }


http://www.kler.cn/a/9774.html

相关文章:

  • 【前端】Vue中如何避免出现内存泄漏
  • 如何用WordPress和Shopify提升SEO表现?
  • 【日志】392.判断子序列
  • qt QVideoWidget详解
  • 想租用显卡训练自己的网络?AutoDL保姆级使用教程(PyCharm版)
  • idea的mapper.xml文件里写sql语句出现Tag name expected错误提示
  • 基于springboot+mybatis的图书购物网站
  • 《Java8实战》第4章 引入流
  • 【voliate 关键字】
  • 行为型模式-命令模式
  • BAT程序员来说一说互联网大厂的秋招和实习,什么时候开始秋招,要不要准备实习? 没找到实习怎么办?实习是不是重要? 如何选择实习的offer?
  • MySQL开发04-MySQL优化器的提示功能
  • 小黑子—Java从入门到入土过程:第六章
  • 【openAI】调用gpt-xxx模型时显示网络连接错误(Error communicating with openAI...)
  • 封仲淹:OceanBase开源技术生态全景解析
  • Java基础教程之Object类是怎么回事?
  • 采用多种方式实现项目的查询多级缓存(四)
  • Java模拟rank() over()函数获取分组排名的方法设计及实现
  • 书 | 图理论 | 2020年GraphSage提出者William L. Hamilton《图表示学习》
  • Systemverilog中Constrained random value generation的记录
  • linux之pthread_join函数
  • 安全防御 --- APT、密码学
  • 《数据库系统概论》第三章课后习题 (4个表+三建工程项目)
  • JAVA所有版本特性【JAVA 1.0 - JAVA 20】
  • 圣戈班Saint-Gobain EDI需求分析
  • 计算机网络 - TCP的效率与特性