android ListView刷新焦点问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android ListView刷新焦点问题相关的知识,希望对你有一定的参考价值。

最近在做一个android项目,使用了ListView, 每隔N秒刷新一下ListView, listView.setAdapter(adapter);
现在的问题是每次刷新后,焦点就会返回到第一条,如何能让原有焦点保留?
3Q~
rospin说的方法可能产生bug,比如用户不点击item,而是用上下键切换焦点,那么焦点就乱套了。
pakil94说的方法没看懂···再看看····

这个问题没有试过,不过我想说一下我的思路,你看是否可行:
你可以在窗体中放置一个隐藏的控件,然后写一个委托事件,每当listview焦点改变后,就将该焦点所在的行的ID作为那个隐藏控件的值,每次刷新的时候检查该值,让焦点停留到LIstView中的该行就可以了!
参考技术A <?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="">
<item android:state_window_focused="false"
android:drawable="@drawable/没有焦点时的图片背景" />
<item android:state_focused="true" android:state_pressed="true"
android:drawable=
"@drawable/非触摸模式下获得焦点并单击时的背景图片" />
<item android:state_focused="false" android:state_pressed="true"
android:drawable="@drawable/触摸模式下单击时的背景图片" />
<item android:state_selected="true"
android:drawable="@drawable/选中时的图片背景" />
<item android:state_focused="true"
android:drawable="@drawable/获得焦点时的图片背景" />
</selector>

试试
参考技术B <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_focused="true" android:drawable="@drawable/tool_operate_btn_focus"/>
    <item android:state_pressed="true" android:drawable="@drawable/tool_operate_btn_focus"/>
    <item android:drawable="@drawable/tool_operate_btn"/>

</selector>

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/white"/>
    <corners android:radius="@dimen/px2"/>
    <stroke android:color="@color/yellow" android:width="@dimen/px6"/>

</shape>

参考技术C 想问一下,刷新后立刻设置焦点。如何设置呢?
是不是需要ListView.getItemIdAtPosition,先取出子的ID
ListView.setSelection(id);
是这样吗

转Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法

Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法 【原文链接】

这篇文章完美的解决了我几个月没结论的bug...

感谢热爱分享的技术达人~

 

我是怎么走进这个大坑的.....

需求:

在listview中出一个EditText 接受用户输入消息。

前期解决方案:

给这个EditText绑定焦点事件.... 悲剧就开始了...

知道吗?当这个EditTextView被点了下,它的焦点就不断的获取,失去,获取,失去...  只点一下... 就频繁的重复..最后大部分是失去焦点。而且在EditTextView中每输入一个字符它都会先失去焦点,再获取焦点...呵呵。

关于获取焦点是因为自己保存了变量。当软盘弹起时会重绘,需要重新给焦点。

正确解决方案:

不应该监听焦点事件,监听touch事件,当点一下时,就记下获取焦点,重绘时再给焦点。

 

 

文章简陋,请谅解~

 

以上是关于android ListView刷新焦点问题的主要内容,如果未能解决你的问题,请参考以下文章

无法移除拉取刷新列表视图的焦点

Android ListView 失去焦点

Android中ListView的Item的子控件获取焦点问题

转Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法

自定义ListView实现下拉刷新,下拉加载的功能

Android学习笔记之ListView与Item的焦点冲突处理