最近想使用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中的其他问题可参考: