ListView中未突出显示初始选择?

时间:2012-12-25 16:23:48

标签: android listview selection highlighting

我一直在寻找几天试图找到为什么我不能得到一个简单的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项(WindowsMo​​bile),但不显示。我触摸该项目,它仍然突出显示,如我所愿。我已经尝试了所有标准的simple_list布局形式,如setFocusable(true),setFocusableInTouchMode(true),setItemChecked(2,true),performItemClick()等函数 - 在setSelection()调用之前或之后 - 但全部为no无济于事。 如果我尝试在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>

1 个答案:

答案 0 :(得分:0)

似乎这个问题源于ListView选择器不能正常工作的事实。例如,我发现,如果我使用带有白色背景的选择器,我的初始选择将突出显示,但只是将颜色更改为白色以外的其他颜色,它不起作用!

因此代码更改为:

listView.setSelector(R.drawable.selector);

和selector.xml是:

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

我尝试了各种选择器,包括背景的单独选择器。有些工作,有些则没有。有些工作在第一次加载apk时,但在再次运行应用程序时无效。