AndroidTV/机顶盒 ListView获取焦点与点击事件问题处理方案
来源:互联网 发布:淘宝的瑕疵大牌化妆品 编辑:程序博客网 时间:2024/05/22 11:32
AndroidTV/机顶盒 ListView获取焦点与点击事件问题处理方案
转载请注明出处:http://blog.csdn.net/qq_18120631/article/details/47257349
本人大二,最近在写一个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 配置如下
<ListView android:id="@+id/lv_classify" android:layout_width="fill_parent" android:layout_height="fill_parent" android:divider="@null" android:focusable="true" android:listSelector="@drawable/bg_button_focused" android:scrollbars="@null" ></ListView>
bg_button_focused.xml
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/l_top" android:state_focused="true"></item></selector>
ListView获取Item的焦点问题
当ListView全局绑定焦点后,又有一个问题来了,当你按到遥控器上的确认键时,不会有点击效果。
之前的配置文件如下
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/l_top" android:state_focused="true"></item> <item android:drawable="@color/purple" android:state_pressed="true"></item></selector>
即使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(); }});@Overridepublic 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开发技术类的文章还是比较少的,请各位多多指正!
转载请注明出处:http://blog.csdn.net/qq_18120631/article/details/47257349
0 0
- AndroidTV/机顶盒 ListView获取焦点与点击事件问题处理方案
- 开发android机顶盒应用 事件,焦点处理
- 开发android机顶盒应用 事件,焦点处理
- 开发android机顶盒应用 事件,焦点处理
- 开发android机顶盒应用 事件,焦点处理
- AndroidTV 的焦点控制问题
- android 机顶盒 listview 获取焦点改变item背景
- Android 机顶盒开发过程中Listview指定item获取焦点
- Android 机顶盒开发过程中Listview指定item获取焦点
- 开发笔记:解决安卓GestureOverlayView手势和ListView点击事件、文本框获取焦点冲突的问题
- 关于机顶盒焦点的获取,及事件响应!!
- 机顶盒Gridview 焦点问题
- 机顶盒焦点问题
- listview与ratingbar结合点击失去焦点问题
- ListView中item点击事件和item中radiobutton的点击editText输入焦点问题
- Android ListView焦点事件冲突问题与解决
- Android ListView焦点事件冲突问题与解决
- ListView 中设置setonitemclicklistener()监听时,无法获取item条目的点击事件焦点
- hdu 1969 pie
- C# 获取URL参数 NameValueCollection
- 支付宝
- ORACLE 实用语句大集合
- ViewPager,java.lang.UnsupportedOperationException: Required method destroyItem was not overridden
- AndroidTV/机顶盒 ListView获取焦点与点击事件问题处理方案
- JavaScript 与 Objective-C 通信
- 第四周第一天(【URL(openStream()】【基于UDP的网络通信】)
- 【Android应用开发技术:媒体开发】拍照
- Redis Java连接操作(转)
- LeetCode_3Longest Substring Without Repeating Characters
- CentOS6.5中桌面上的面板被误删后,如何正常恢复?
- JavaScript 的keydown,keypress,keyup事件
- ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting B