安卓 ListView : how to select an item?

标签 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)-调用。

我错过了什么?

迈克尔

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

最佳答案

此处缺少的元素是 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
}

关于安卓 ListView : how to select an item?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10002839/

相关文章:

android - 设计 Android 小部件的宽度和高度

C# 列表问题(Android/Monodroid ListView 搜索)

java - 无法在android中的 ListView 中获取搜索结果的确切位置

android - 如何从其他应用程序打开 Whatsapp

android - 如何优化分辨率为 1920x1080 的图像,以使其作为背景?

android - 更新到 buildTools 27.0.3 后 Gradle 失败

java - Android 中的 If Else 语句不起作用

android - 复选框上下文菜单

android - 如何检索 View 的尺寸?

android - CursorAdapter 动态排序