java - 什么操作会触发 ListView 中的 onItemSelected?

标签 java android listview android-adapter

我有一个使用 CursorAdapter 的药物 ListView 。我的目标是当用户按下提交按钮时获取对所选项目的光标的引用,但我一直得到空值。这是我当前的代码:

mSubmitButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Cursor selectedMedication = (Cursor) mMedicationListView.getSelectedItem();
        if(selectedMedication != null)
        {
            MedicationSelectionListener activity = (MedicationSelectionListener) getActivity();
            activity.onMedicationSelected(new Medication(selectedMedication));
        } else{
            Toast.makeText(getActivity(), "Must select a medication.", Toast.LENGTH_SHORT).show();
        }
    }
});

执行时,selectedMemination 始终为 null。我已经实现了一个可绘制的selector.xml 文件,该文件在按下时会更改项目的背景颜色,并且效果很好,所以我的印象是单击该项目就足够了。

我还尝试了以下操作,通过在每次单击项目时设置选定的药物变量:

mMedicationListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Cursor c = (Cursor) mMedicationListView.getItemAtPosition(position);
        if(c.moveToFirst())
            mSelectedMedication = new Medication(c);
    }
});

这工作得很好,但是当我感兴趣的是最终选定的项目时,我觉得它执行了一堆毫无意义的操作。单击某个项目是否应该触发 mMespirationListView.onItemSelected()?如果没有,采取什么措施来确保这种情况发生?

最佳答案

so I was under the impression that clicking the item was enough.

点击不是使用 ListView 进行选择。在以下情况之一将发生选择:

  • 您以编程方式设置选择,或者

  • 用户使用五向导航选项(例如方向键、轨迹球、箭头键)并按向上/向下按钮来移动突出显示栏

all I am interested in is the final selected item

ListView 默认情况下是一个命令小部件。当用户点击 ListView 中的一行时,您的应用应该执行某些操作,通常会在此过程中删除 ListView

如果,OTOH,用户正在选择某些内容,列表和选择仍保留在屏幕上(例如,主从模式、选择州/省作为填写地址的一部分) ,那么你应该使用选择模式。这可能是单选模式(通常用右边缘的单选按钮表示)、多选模式(通常用右边缘的复选框表示)或多选模式(通常用“激活”表示)状态设置持久突出显示,通常保留用于主从类型的场景)。

不要不要试图将“选择”重载为“选择”。听起来您正在将 ListView 呈现为更大的内容的一部分,用户正在其中做出选择,因此请使用选择模式。

关于java - 什么操作会触发 ListView 中的 onItemSelected?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28460731/

相关文章:

python - Kivy:使用 ListAdapter 或 DictAdapter 更新 ListView 数据不会更改按钮文本

android - 带有按钮 onclick 位置的 ListView 在滚动时发生变化

java - tdbloader2 因类路径错误而失败

android - 如何在 Android SDK(不是 NDK)中使用 OpenGL ES 2.0?

android - 需要显示图像 - 图像名称在 SQLite (Android) 中存储为文本

java - 更改微调器突出显示和线条颜色

java - 附加到数字的字符的正则表达式为 "1a"

java - Spring框架抽象

java - Tomcat 6文件上传策略

android - 如何与 ListView 中的按钮交互