0

我一直在寻找几天来试图找出为什么我无法获得一个简单的 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() 调用之前或之后——但都没有利用。如果我尝试在 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>
4

1 回答 1

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 时工作,但在再次运行应用程序时不工作。

于 2012-12-26T15:40:32.047 回答