问题描述
我有一个包含几个项目的 ListFragment。 我正在尝试实现一个长按来选择某个操作(编辑/删除)的项目。 这是我在 ListFragment 中的内容。
public void onStart() {
super.onStart();
getListView().setOnItemLongClickListener(itemSelectListener);
}
...
private AdapterView.OnItemLongClickListener itemSelectListener = new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getContext(), String.format("Longclick success! Pos: %d", position), Toast.LENGTH_SHORT).show();
view.setSelected(true);
return true;
}
};
所以长按是有效的。 列表项正确突出显示并保持突出显示。 Toast 消息还显示正确的输出(位置)。
我还尝试为parent.setSelection(position)
切换view.setSelected(true)
,结果相同。
但是每当我调用getListView().getSelectedItemId()
或任何相关方法时,我都会得到null
或垃圾整数。
我从菜单选项中调用它,如下所示:
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch(item.getItemId()) {
case (R.id.action_toast):
Toast.makeText(
getContext(),
String.format("ID: %d, POS: %d",
getListView().getSelectedItemId(),
getListView().getSelectedItemPosition()),
Toast.LENGTH_SHORT).show();
return true;
default:
return false;
}
}
出于好奇,我还将对 Toast...show() 的调用粘贴到onItemLongClick
,并得到了相同的结果。
为什么这不起作用? 看起来很简单。
1楼
默认情况下,列表不应该有选择,因此当您单击ListView
项目时,它不会将其状态更改为selected 。
这就是为什么getListView().getSelectedItemId()
和getListView().getSelectedItemPosition()
将始终返回 null 的原因。
使用LongClickListener
返回的position
来获取您的项目。