3

我在创建 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)-调用。

我错过了什么?

迈克尔

PS.:我的列表确实有> = 2个元素......

4

3 回答 3

8

这里缺少的元素是choiceMode. 这没有很好的记录,但默认情况下,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
}
于 2012-04-03T23:25:40.380 回答
1

尝试这个: -

    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();

      }
    });

希望它会帮助你。

于 2012-04-04T05:19:24.127 回答
1

我才意识到,我完全离开了。在触摸模式下,选择一个项目根本没有意义。您只需在单击时直接对其进行操作(并调用 OnClickListener 。我刚刚开始意识到,Android 可以处理所有这些不同的设备,它们有方向控制按钮、触摸屏等。很难想象,如何在不使用的设备上完成操作到或不能测试。

于 2012-04-04T23:26:57.147 回答