我有一个带有几个项目的ListFragment。我试图实现一个longclick 选择某个动作的项目(编辑/删除)。这就是我所拥有的 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;
}
};
所以longclick工作正常。列表项正确突出显示并保留 突出显示。 toast消息也会显示正确的输出(对于位置)。
我也试过切换view.setSelected(true)
parent.setSelection(position)
具有相同的结果。
但每当我拨打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
并得到了相同的结果。
为什么这不起作用?看起来很简单。
答案 0 :(得分:0)
默认情况下,列表不会选择,因此当您点击ListView
项时,它不会将其状态更改为 selected 。
这就是为什么getListView().getSelectedItemId()
和getListView().getSelectedItemPosition()
将始终返回null。
使用position
中返回的LongClickListener
来获取您的项目。