TV中RecyclerView添加item的点击事件和删除item之后获取焦点解决

本文介绍了在RecyclerView中实现item点击事件的方法,通过自定义adapter和接口,模仿ListView的方式处理点击。同时,针对删除item后如何重新获取焦点的问题,提出了解决方案:在删除后重新加载onBindViewHolder时,确保position=0的item获取焦点。

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

关于在RecyclerView中添加点击事件,已经有无数的博客了,我之所以还要写一遍,主要是为了自己加深影响。


RecyclerView的好用之处比起ListView和GridView来说就太多了,这里也不在赘述,而不同之处是RecyclerView没有item的点击事件,所以这里实现方式是模仿ListView的item点击事件,构造一个自定义的点击事件来。


一、在自定义的adapter中定义接口OnItemClickListener。

public static interface OnItemClickListener{
        void onItemClick(View view, int position);
    }

同时,声明这个接口的变量: 

private OnItemClickListener mOnItemClickListener = null;
(这里需要注意的地方是,要implement OnclickListener)


二、在onCreateViewHolder中添加每个item的点击事件。

view.setOnClickListener(this);
然后在onClick方法中进行position的获取

@Override
    public void onClick(View v) {
        if (mOnItemClickListener != null) {
            //注意这里使用getTag方法获取position
            mOnItemClickListener.onItemClick(v,(int)v.getTag());
        }
    }
因为在这里调用了getTag方法,所以要在onBindViewHolder方法中进行setTag的设置,不然你就不会知道position怎么来的了。
holder.itemView.setTag(position);

三、设置一个方法,给activity来调用。

public void setOnItemClickListener(OnItemClickListener listener) {
        this.mOnItemClickListener = listener;
    }


当着一切完成之后,activity中就可以对item记性操作了。

四、activity中对item的操作

mAdapter.setOnItemClickListener(new AppsAdapter.OnItemClickListener() {
                @Override
                public void onItemClick(View view, int position) {
                    Intent intent = new Intent(StopRunActivity.this, AppManagementActivity.class);
                    intent.putExtra("name", mAppInfoList.get(position).getPackageName());
                    //intent.putExtra("position", position);
                    startActivity(intent);
                    Toast.makeText(StopRunActivity.this, mAppInfoList.get(position).getPackageName(), Toast.LENGTH_SHORT).show();
                    finish();
                }
            });

这里的具体操作忽略,我们可以获得两个参数,一个是view,另一个是position。因为很多时候,我们都是对各种类型的数组进行操作,获得相关的position

就足够来进行相关的操作了。


补:

删除item子控件之后获取焦点问题:

每次删除item,都会重新加载一次onBindViewHolder()方法,重新排布一下子item的position。

我们这里设置每次重新加载的时候,都将position = 0 获得焦点,代码如下:

holder.itemView.setFocusable(true);
        if (position == 0) {
            Log.d(TAG, "requestFocus");
            holder.itemView.requestFocus();
        }

首先设置itemview可以获得焦点,

然后让position = 0 获取焦点 即可。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值