当前位置: 代码迷 >> Android >> 检索 ListFragment 中的选定项
  详细解决方案

检索 ListFragment 中的选定项

热度:29   发布时间:2023-08-04 11:29:25.0

我有一个包含几个项目的 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 ,并得到了相同的结果。

为什么这不起作用? 看起来很简单。

默认情况下,列表不应该有选择,因此当您单击ListView项目时,它不会将其状态更改为selected

这就是为什么getListView().getSelectedItemId()getListView().getSelectedItemPosition()将始终返回 null 的原因。

使用LongClickListener返回的position来获取您的项目。

  相关解决方案