我一直在寻找几天来试图找出为什么我无法获得一个简单的 ListView 来突出显示初始选择 - 就像选择已被触摸一样。我已经阅读了有关触摸模式的讨论,但仍然找不到解决方案。
我的代码的一个简单版本是:
public class TestList extends Activity {
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.listmain);
// Layout contains just a ListView with id list
final ListView listView = (ListView) findViewById(R.id.list);
String[] values = new String[] {"Android","iPhone","WindowsMobile",
"Blackberry","WebOS","Ubuntu","Windows7","Max OS X","Linux","OS/2"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_checked, values);
listView.setAdapter(adapter);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
listView.setSelector(android.R.color.holo_orange_dark);
listView.requestFocusFromTouch();
listView.post(new Runnable() {
@Override
public void run() {
listView.setSelection(2);
}
});
}
}
生成的 ListView 应该突出显示第 2 项 (WindowsMobile),但没有。如果我触摸该项目,它会保持突出显示,如我所愿。我已经尝试了所有标准的 simple_list 布局形式,例如 setFocusable(true)、setFocusableInTouchMode(true)、setItemChecked(2,true)、performItemClick() 等函数——在 setSelection() 调用之前或之后——但都没有利用。如果我尝试在 GetView() 中设置突出显示的项目,用户选择不同项目的能力就会丢失。谁能告诉我如何在不禁用用户更改选择的能力的情况下以编程方式设置初始突出显示的项目?
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#FFCC00"
android:dividerHeight="1dp" >
</ListView>