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

本文介绍了作者在开发Android TV应用时遇到的ListView焦点卡顿问题,以及点击事件无法正常响应的解决方案。问题在于为每个Item设置setFocusable(true)导致焦点切换缓慢。解决方法是全局绑定焦点,并自定义点击效果。通过去除setItemFocusable(true)并使用自定义的背景资源和监听器,实现了流畅的焦点切换和点击反馈。

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

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开发技术类的文章还是比较少的,请各位多多指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值