Android ListView:如何选择项目?

时间:2012-04-03 23:17:58

标签: android android-widget android-listview

我在使用我创建的ListView时遇到问题:我想在点击它时选择一个项目。

我的代码如下:

protected void onResume() {
...
ListView lv = getListView(); 
lv.setOnItemSelectedListener(new OnItemSelectedListener() 
{
    public void onItemSelected(AdapterView<?> adapterView, View view, int pos, long id) {
        Log.v(TAG, "onItemSelected(..., " + pos + ",...) => selected: " + getSelectedItemPosition());
    }
    public void onNothingSelected(AdapterView<?> adapterView) {
        Log.v(TAG, "onNothingSelected(...) => selected: " + getSelectedItemPosition());
    }
});
lv.setOnItemClickListener(new OnItemClickListener()
{
    public void onItemClick(AdapterView<?> adapterView, View view, int pos, long id) {
        lv.setSelection(pos);               
        Log.v(TAG, "onItemClick(..., " + pos + ",...) => selected: " + getSelectedItemPosition());              
    }
});
...
}

当我运行此功能并点击例如在第二项(即pos = 1)我得到:

04-03 23:08:36.994: V/DisplayLists(663): onItemClick(..., 1,...) => selected: -1

即。即使使用正确的参数调用OnItemClickListener并调用setSelection(1),也没有选择任何项(因此也从不调用OnItemSelectedListener.onItemSelected(...))并且getSelectedItemPosition()在setSelection之后仍然产生-1 (1)-call。

我错过了什么?

迈克尔

PS。:我的列表确实有&gt; = 2个元素......

3 个答案:

答案 0 :(得分:8)

这里缺少的元素是choiceMode。这不是很好documented,但默认情况下,在Android中的ListViews(以及扩展名,任何从AbsListView继承的内容,如GridView等)不允许选择,但它可以启用 - 在XML中或在代码中:

XML中的

<ListView
  ...
  android:choiceMode="singleChoice" />

代码:

mListView.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);

请注意,一旦你这样做,android会为你setSelection(),所以你不需要自己跟踪它。那时你的onClickListener只是用于保存选择,我甚至不打扰OnSelectedItemListener:

@Override
public void onItemClick(final AdapterView<?> list, final View v,
    final int position, final long id) {
  Participant p = mAdapter.getParticipantForId(id);
  eventManager.fire(new ParticipantSelectedEvent(p));
  pxList.smoothScrollToPosition(position); // Make sure selection is plainly visible
}

答案 1 :(得分:2)

试试这个: -

    ListView lv = getListView();

    lv.setOnItemClickListener(new OnItemClickListener() {
      public void onItemClick(AdapterView<?> parent, View view,
          int position, long id) {

          // selected item
          String product = ((TextView) view).getText().toString();

         Toast.makeText(getApplicationContext(), "Selected Item :" +product, Toast.LENGTH_SHORT).show();

      }
    });

希望它会对你有所帮助。

答案 2 :(得分:1)

我刚刚意识到,我完全没了。在触摸模式下,选择项目根本没有意义。单击时(直接调用OnClickListener ),您只需直接操作它。 我刚刚开始欣赏,Android负责所有这些不同的设备,它们有方向控制按钮,触摸屏等。想象一下,如何在不使用设备的设备上完成操作并不总是很容易到或不能测试。