Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在ListView中选择了什么操作?_Java_Android_Listview_Android Adapter - Fatal编程技术网

Java 在ListView中选择了什么操作?

Java 在ListView中选择了什么操作?,java,android,listview,android-adapter,Java,Android,Listview,Android Adapter,我有一个使用游标适配器的药物列表视图。我的目标是在用户按下submit按钮时获得对所选项目光标的引用,但我一直得到一个空值。这是我目前的代码: mSubmitButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Cursor selectedMedication = (Cursor) mMedicationListView.get

我有一个使用游标适配器的药物列表视图。我的目标是在用户按下submit按钮时获得对所选项目光标的引用,但我一直得到一个空值。这是我目前的代码:

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();
        }
    }
});
执行此操作时,
selectedmediation
始终为空。我已经实现了一个drawable 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);
    }
});
mMedicationListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
游标c=(游标)mMedicationListView.getItemAtPosition(位置);
if(c.moveToFirst())
M选择药物=新药(c);
}
});
这很好,但我觉得它执行了一系列毫无意义的操作,而我感兴趣的只是最终选定的项目。单击某个项目是否应触发“指示列表视图.onItemSelected()”?如果没有,采取什么措施来确保这一点

所以我觉得点击这个项目就足够了

单击不是带有
列表视图的选择。在以下情况下,将进行选择:

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

  • 用户使用五向导航选项(例如,D-pad、轨迹球、箭头键)并按下该选项上的上/下键以移动高亮显示栏

我所感兴趣的是最终选定的项目

默认情况下,
ListView
是一个命令小部件。当用户点击
列表视图
中的某一行时,你的应用程序应该做些什么,通常是一路上去掉
列表视图

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


不要试图将“选择”重载为“选择”。听起来像是你在展示一个
列表视图
作为更大的部分,用户在这里做出选择,所以使用一种选择模式。

你说的“一堆毫无意义的操作”是什么意思?@Emmanuel我有一个很大的药物列表,出于某种原因,用户上下选择了每一种药物。每次我更改那个类字段(这不是一个繁重的操作,我明白了),但为什么要浪费时间这样做,而我应该能够在最后阅读所选的项目?感谢您澄清了区别,我不知道这是特定于您提到的导航选项。ListView已经是单一选项。那么,我是否应该继续使用
onClick
方法来处理这个问题?@McAdam331:如果它是一个单选列表,那么您可以通过
列表视图中调用的
getCheckedItemPosition()
,找到用户选择的内容。