在ListFragment中检索所选项目

时间:2015-10-25 08:50:16

标签: android android-listfragment

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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