RecycleView在TV应用中的焦点问题

最近想使用RecycleView(姑且简称为RV)来替换实现横向的ListView,这是非常简单的,直接使用布局管理器设置成横向

final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        mRecyclerView.setLayoutManager(linearLayoutManager);

但是在TV应用中存在一个焦点实现的问题,需要通过焦点的移动来实现移动item,并且RV中没有setSelection方法,无法指定初始情况下,默认选中哪个item。所以需要在RV获得焦点的时候,手动让它的子item获得焦点

mRecyclerView.setOnFocusChangeListener(new OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                Log.i("abc","hasfocus:"+hasFocus);
                if(hasFocus){
                    if(mRecyclerView.getChildCount()>0){
                        mRecyclerView.getChildAt(0).requestFocus();
                    }
                }
            }
        });

并且需要在Adapter中设置item的可获得焦点,即:

 holder.itemView.setFocusable(true);

不设置的话,焦点是不会获取到的(刚开始我就是没有设置这个属性,结果子item一直未获得焦点,折腾了好久( ˇˍˇ ))

子item获得焦点后,使用遥控器的左右键就能横向移动item列表了

ps:在TV中的其他问题可参考:

http://blog.csdn.net/Singleton1900/article/details/48468629

    原文作者:跑步_跑步
    原文地址: https://blog.csdn.net/anhenzhufeng/article/details/50147281
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞