两个listview之间焦点切换, 如何将焦点落在之前所处位置
来源:互联网 发布:高速公路车流量数据 编辑:程序博客网 时间:2024/06/08 18:55
图一: 焦点在频道列表时
首先通过mChannelListView.requestFocus();获取焦点, 然后mChannelAdapter.getSelectedPosition()获取到焦点之前所在位置, 那么对该位置的item状态进行设置, 总共用了三行代码:
图二:焦点切换到节目列表时
如上图,要实现频道列表中的字体有三种颜色状态 , 没有焦点时的颜色 #a0b1b5b7, 选中时候的字体颜色#ffe8e8e8b 和 焦点离开的时候字体颜色#ff1198ff
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 没有焦点时字体颜色 --> <item android:state_selected="false" android:color="#a0b1b5b7"/> <!-- 选中时的字体颜色 --> <item android:state_selected="true" android:color="#ffe8e8e8"/></selector>
焦点离开的时候字体颜色,通过代码来设置, 代码如下, 当焦点从频道列表切换到节目列表, isHighLight为true , 那么字体颜色将被设置为蓝色, 这个时候字体颜色是永久改变的,无法还原, 并不会像 text:selector属性中焦点移动后 ,能够还原, 所以当焦点从节目列表切换到频道列表的时候, 这个时候有两个工作: 一, 焦点落在之前离开时候的位置 ; 二 , 字体颜色还原成原来的 selector状态而不是继续显示为蓝色 .
问题一: 如何记住之前焦点离开时候的位置?
listview设置OnItemSelectedListener监听, 焦点移动的过程,会触发onItemSelected()的方法, 这个时候通过mChannelListView.getSelectedItemPosition()方法总是返回 0,所以这种方法没法获得选中item的position位置, 所以只能通过mChannelAdapter.setSelectedPostion(position);方法记录住焦点的位置
<span style="font-size:14px;"><span style="font-size:12px;">public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {LogUtils.i( "onItemSelected pos : "+position);mChannelListView.getSelectedItemPosition();mChannelAdapter.setSelectedPostion(position);ChannelData channelData = mChannelList.get(position);loadPbData(channelData.getResourceCode(), 0, position);}</span></span>问题二 : 那么焦点如何回到之前的位置?
首先通过mChannelListView.requestFocus();获取焦点, 然后mChannelAdapter.getSelectedPosition()获取到焦点之前所在位置, 那么对该位置的item状态进行设置, 总共用了三行代码:
<span style="font-size:14px;"> mChannelListView.requestFocus();int pos = mChannelAdapter.getSelectedPosition();mChannelAdapter.setSelectedTextColor(pos, false);</span>重点在于如何将蓝色字体还原到原来的颜色, 首先根据position找到相应的TextView控件,这里注意的是mListView.getChildAt(position - mListView.getFirstVisiblePosition()); 如果单纯mListView.getChildAt(position),可能该item是不可见的所以为空
<span style="font-size:14px;"><span style="font-size:12px;">/** * 将选中的条目字体颜色设置为蓝色 * @param position * @param isHightlight */public void setSelectedTextColor(int position, boolean isHightlight){ <span style="color:#FF6666;">//避免position对应的itemView不可见为空 </span> View itemView = mListView.getChildAt(position - mListView.getFirstVisiblePosition());TextView mCNum = (TextView) itemView.findViewById(R.id.channel_num);TextView mCName = (TextView) itemView.findViewById(R.id.channel_name);<span style="color:#FF6666;">//通过selector的xml文件还原到之前的状态</span>XmlPullParser xpp = mCtx.getResources().getXml(R.drawable.textcolorselector2);try {ColorStateList csl = ColorStateList.createFromXml(mCtx.getResources(),xpp);mCNum.setTextColor(csl);mCName.setTextColor(csl);if(isHightlight){mCNum.setTextColor(Color.parseColor("#ff1198ff"));mCName.setTextColor(Color.parseColor("#ff1198ff"));}} catch (XmlPullParserException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}</span></span>
0 0
- 两个listview之间焦点切换, 如何将焦点落在之前所处位置
- Listview gridview TV 焦点落在item上面修改背景色
- 焦点落在文本框的最后
- Android TV ListView列表焦点保留?ListView如何获取焦点?
- ListView 焦点
- ListView焦点
- 如何去掉按钮在输入焦点切换时所产生的闪烁
- 如何控制页面的位置与焦点
- C#如何在Form启动时控制焦点落在某一个控件上?
- Recyclerview抢占焦点,导致切换fragment后位置错乱
- Android Viewpager切换焦点问题,ScrollView,ListView发生位移
- EditText 输入法问题(setContentView切换两个view,抢焦点问题)
- 设置Textbox焦点位置
- 设置 dataGridView 焦点位置
- qt 判断焦点位置
- 关于ListView中存在两个EditText焦点的解决方法
- 解决listview和Imagebutton之间焦点冲突问题
- 回车切换焦点问题
- 堆的应用
- [FAQ08887]如何使用Trace32分析NE问题?
- Sort a linked list in O(n log n) time using constant space complexity.
- 第四周项目3(1)-单链表应用 逆置单链表
- poj1014多重背包
- 两个listview之间焦点切换, 如何将焦点落在之前所处位置
- @Resource和@Autowired的区别
- 1. java基础(个人小总结)(5)
- 第四周【项目7-单链表应用举例】
- SAP 标准金税接口方案介绍
- [FAQ10640]如何调试在dalvik-jit中抛出的SIGSEGV类型的NE
- CSS 样式规则选择器
- 6.8
- 第四周项目1