AndroidTV/机顶盒 ListView获取焦点与点击事件问题处理方案

本人大二,最近在写一个Android机顶盒的小项目,遇到了这样一个问题。由于App的布局复杂,导致ListView用遥控器获取其Item焦点时变得很卡很慢。需要不断点击上下键才能移动焦点。看了下Logcat,发现焦点每移到最后一个时,总是”can’t find view with Id 1/2/3/4”,试了网上无数种解决方案还是不行。

后来发现,自己为每个Item.setFocusable(true)的绑定方式是有问题的,会导致android系统在ListView里面遍历view的速度很慢。因为当我把Item.setFocusable(true)给注释掉时,ListView非常流畅

最后的解决方案是,直接在Listview做一个全局的绑定来解决问题。

ListViewItem绑定问题解决方案

ListView 配置如下

bg_button_focused.xml

ListView获取Item的焦点问题

当ListView全局绑定焦点后,又有一个问题来了,当你按到遥控器上的确认键时,不会有点击效果。

之前的配置文件如下

即使pressed设置为true还是没有作用,因此我是自己实现了一个选中效果,具体代码如下:

classifyListView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parent, View view,

int position, long id) {

if (position != clickPosition) {

clickPosition = position;

}

adapter.notifyDataSetChanged();

}

});

@Override

public View getView(final int position, View convertView,

ViewGroup parent) {

LayoutInflater inflater = LayoutInflater.from(STBMainActivity.this);

convertView = inflater.inflate(R.layout.item_classify, null);

final TextView tv = ((TextView) convertView

.findViewById(R.id.tv_item_classify));

tv.setText(InfoConfig.info.class_list.get(position).name);

tv.setBackgroundResource(R.drawable.bg_button_focused);

if (position == clickPosition) {

tv.setBackgroundColor(STBMainActivity.this.getResources().getColor(R.color.purple));

}

return convertView;

}

实现起来非常简单。

希望这篇文章能帮助到大家,毕竟目前AndroidTV开发技术类的文章还是比较少的,请各位多多指正!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐