什么动作触发 ListView 中的 onItemSelected?
What action triggers onItemSelected in a ListView?
我有一个使用 CursorAdapter 的药物列表视图。我的目标是在用户按下提交按钮时获取对所选项目的 Cursor 的引用,但我一直得到空值。这是我当前的代码:
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);
}
});
这很好用,但是当我只对最终选择的项目感兴趣时,我觉得它执行了一堆毫无意义的操作。单击项目是否应该触发 mMedicationListView.onItemSelected()
?如果没有,采取什么行动来确保发生这种情况?
so I was under the impression that clicking the item was enough.
单击不是带有 ListView
的选择。选择将在以下任一时间发生:
您以编程方式设置选择,或者
用户使用五向导航选项(例如,方向键、轨迹球、箭头键)并在其上按 up/down 以移动高亮栏
all I am interested in is the final selected item
默认情况下,ListView
是命令小部件。当用户点击 ListView
中的一行时,您的应用程序应该开始执行某些操作,通常会一路摆脱 ListView
。
如果,OTOH,用户正在选择 某物,其中列表和选择保留在屏幕上(例如,主从模式,选择 state/province 作为填写地址的一部分),那么你应该使用选择模式。这可能是单选模式(通常用右边缘下方的单选按钮表示)、多选模式(通常用右边缘下方的复选框表示)或多选模式模式(通常用 "activated" state 设置一个持久的高亮,通常保留用于主要细节类型的场景)。
不要不要尝试重载"selection"来表示"choice"。听起来您正在将 ListView
作为更大内容的一部分呈现,用户正在其中做出选择,因此请为此使用选择模式。
我有一个使用 CursorAdapter 的药物列表视图。我的目标是在用户按下提交按钮时获取对所选项目的 Cursor 的引用,但我一直得到空值。这是我当前的代码:
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);
}
});
这很好用,但是当我只对最终选择的项目感兴趣时,我觉得它执行了一堆毫无意义的操作。单击项目是否应该触发 mMedicationListView.onItemSelected()
?如果没有,采取什么行动来确保发生这种情况?
so I was under the impression that clicking the item was enough.
单击不是带有 ListView
的选择。选择将在以下任一时间发生:
您以编程方式设置选择,或者
用户使用五向导航选项(例如,方向键、轨迹球、箭头键)并在其上按 up/down 以移动高亮栏
all I am interested in is the final selected item
默认情况下,ListView
是命令小部件。当用户点击 ListView
中的一行时,您的应用程序应该开始执行某些操作,通常会一路摆脱 ListView
。
如果,OTOH,用户正在选择 某物,其中列表和选择保留在屏幕上(例如,主从模式,选择 state/province 作为填写地址的一部分),那么你应该使用选择模式。这可能是单选模式(通常用右边缘下方的单选按钮表示)、多选模式(通常用右边缘下方的复选框表示)或多选模式模式(通常用 "activated" state 设置一个持久的高亮,通常保留用于主要细节类型的场景)。
不要不要尝试重载"selection"来表示"choice"。听起来您正在将 ListView
作为更大内容的一部分呈现,用户正在其中做出选择,因此请为此使用选择模式。