2015-02-11 47 views
0

我有一个使用CursorAdapter的药物ListView。我的目标是在用户按下提交按钮时获取对所选项目的光标的引用,但我一直得到空值。这里是我当前的代码:在ListView中,哪些操作触发onItemSelected?

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

当此执行,selectedMedication始终为空。我已经实现了一个可绘制的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); 
    } 
}); 

这工作得很好,但我觉得它预制一堆毫无意义的操作时,所有我感兴趣in是最终选定的项目。应该点击一个项目触发器mMedicationListView.onItemSelected()?如果不是,那么采取什么行动来确保发生?

+0

你是什么意思的“一堆毫无意义的行动”? – Emmanuel 2015-02-11 17:36:34

+0

@Emmanuel比方说,我有一个很大的列表药物,并由于某种原因,用户上下选择每一个。每次我改变那个班级的领域(这不是一个沉重的操作,我都明白了),但是为什么当我应该能够在最后阅读选定的项目时浪费时间呢? – AdamMc331 2015-02-11 17:38:30

回答

2

所以我的印象是点击这个项目就够了。

点击并非选择ListView。将发生的选择既可以当:

  • 您设置一个选择编程,或

  • 用户使用五向导航选项(例如,d-垫,轨迹球,方向键),并按下了/向下对以移动高亮条左右

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

A ListView默认情况下是一个命令窗口小部件。当用户点击ListView中的一行时,您的应用应该执行某些操作,通常会一路摆脱ListView

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

不是试图超载“选择”,意思是“选择”。这听起来像你正在展示一个ListView作为更大的东西的一部分,用户正在做出选择,所以使用一个选择模式。

+0

感谢您澄清区别,我不知道它是特定于您提到的导航选项。 ListView已经是单一的选择。我应该继续使用“onClick”方法来处理这个问题吗? – AdamMc331 2015-02-11 17:49:59

+1

@ McAdam331:如果它是单选列表,您可以通过'ListView'上的'getCheckedItemPosition()'调用用户选择的内容。 – CommonsWare 2015-02-11 18:05:44

+0

好吧,我明白了。再次感谢你的帮助。 – AdamMc331 2015-02-11 18:24:38

相关问题