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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是在Kotlin中实现RecyclerView点击子项跳转的示例代码: 1. 在RecyclerView的Adapter中设置子项点击事件监听器: ```kotlin class MyAdapter(private val itemList: List<Item>) : RecyclerView.Adapter<MyAdapter.ViewHolder>() { private var listener: OnItemClickListener? = null fun setOnItemClickListener(listener: OnItemClickListener) { this.listener = listener } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val view = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false) return ViewHolder(view) } override fun onBindViewHolder(holder: ViewHolder, position: Int) { val item = itemList[position] holder.textView.text = item.text holder.itemView.setOnClickListener { listener?.onItemClick(item) } } override fun getItemCount(): Int { return itemList.size } inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { val textView: TextView = itemView.findViewById(R.id.text_view) } interface OnItemClickListener { fun onItemClick(item: Item) } } ``` 2. 在Activity或Fragment中实现OnItemClickListener接口,并在onCreateView方法中设置RecyclerView的Adapter和点击事件监听器: ```kotlin class MyFragment : Fragment(), MyAdapter.OnItemClickListener { private lateinit var recyclerView: RecyclerView override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.fragment_layout, container, false) recyclerView = view.findViewById(R.id.recycler_view) recyclerView.layoutManager = LinearLayoutManager(context) val itemList = listOf(Item("Item 1"), Item("Item 2"), Item("Item 3")) val adapter = MyAdapter(itemList) adapter.setOnItemClickListener(this) recyclerView.adapter = adapter return view } override fun onItemClick(item: Item) { // 处理子项点击事件,跳转到其他Activity或Fragment val intent = Intent(context, DetailActivity::class.java) intent.putExtra("text", item.text) startActivity(intent) } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

四月天行健

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

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

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

打赏作者

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

抵扣说明:

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

余额充值