我知道这已被问了很多次,但没有一个答案适合我。
我有一个活动,它托管一个选择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) - 但是,这是一个很大的问题,因为正确的时间延迟还取决于相关平板电脑的处理速度。
这样做的更好/正确的方法是什么。