Android列表视图:在方向更改时选择保留项目

时间:2014-07-01 12:14:43

标签: android listview

我知道这已被问了很多次,但没有一个答案适合我。

我有一个活动,它托管一个选择ListView( - 任何地方都没有支持库)。 在OnCreate的活动创建时,使用自定义适配器从数据库条目填充该列表,实现ListAdapter接口。

列表视图是一个自定义布局,在LinearLayout中包含两个TextView。

我有一个处理视觉指示的州名单:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_selected="true" android:drawable="@color/orange_selected" />
    <item android:state_pressed="true" android:drawable="@color/orange_pressed" />
</selector>

单击/点击某个项目时,我会在OnItemClickedListener侦听器中捕获它,然后以这种方式选择该行:

v.post(new ViewSelector(v));

ViewSelector是一个可以执行此操作的runnable:

view.setSelected(true);

当我更改方向时,我通过onSaveInstanceState(Bundle)将当前选定的行存储在传出包中,然后在onCreate中将其重新拾取,并将其传递到自定义适配器。

然后,在处理getView调用时,适配器将检查选定的行索引:

if(SelectedRow == position)
    v.post(new ViewSelector(v));

虽然我在行视图上调用相同的方法来选择行(通过帖子),但行不会被选中。

一种方法是调用View.postDelayed(action,delayMillis) - 但是,这是一个很大的问题,因为正确的时间延迟还取决于相关平板电脑的处理速度。

这样做的更好/正确的方法是什么。

0 个答案:

没有答案