删除时无法取消选择ListView项

时间:2016-08-22 18:52:49

标签: java android listview

在一个简单的应用程序中通过我对Java和Android的介绍来跋涉,并遇到了ListView项目选择的问题。对于我的一个活动,我有一个带有两个按钮的布局,其中一个是"删除"按钮,以及"段落的列表视图"这基本上是设备通过传感器时的时间戳。

我已经实现了点击某个项目以进行选择的功能,然后启用"删除"按钮。点击"删除"按钮删除"段落#34;但我仍然选择了一个我不想要的选项。

为了实现选择,我将以下属性添加到ListView:

    android:id="@+id/passagesListView"
    android:choiceMode="singleChoice"
    android:listSelector="#666666"

OnCreate通过OnItemClickListener支持选择:

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_passages);
        passagesViewAdapter = new PassagesViewAdapter(this, R.layout.passages_row_layout, passages);

        final ListView passagesListView = (ListView) findViewById(R.id.passagesListView);
        assert passagesListView != null;

        final Button deleteButton = (Button) findViewById(R.id.deleteButton);
        deleteButton.setEnabled(false);

        buildPassageList();
        passagesListView.setAdapter(passagesViewAdapter);

        passagesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapter, View view, int position,long arg3) {
                Toast.makeText(ViewPassagesActivity.this, "position is " + position,
                        Toast.LENGTH_LONG).show();
                view.setSelected(true);
                passagesViewAdapter.notifyDataSetChanged();
                selectedItemPos = position;
                deleteButton.setEnabled(true);

            }
        });
    }

这部分有效。但是,删除存在一些问题。正如你在评论中看到的那样,我已经尝试了几种我在StackOverflow上找到的方法似乎适用但是,虽然我能够从列表中删除正确的项目,但我仍然在调用之后最终得到一个选定的项目。删除()。

    public void delete (View view)
    {
        final Button deleteButton = (Button) findViewById(R.id.deleteButton);
        ListView passagesListView = (ListView) findViewById(R.id.passagesListView);

        if(selectedItemPos != -1)
        {
            Toast.makeText(ViewPassagesActivity.this, "remove " + selectedItemPos,
                    Toast.LENGTH_LONG).show();

            // This did not work, which is strange since it worked similarly for selection when clicked
//            View itemView = passagesListView.getChildAt(selectedItemPos);
            View itemView = passagesViewAdapter.getView(selectedItemPos, null, passagesListView);
            itemView.setSelected(false);

            // This was also recommended in various posts on StackOverflow.
            // Not clear whether clearChoices applies only to checkBoxes?
//            passagesListView.clearChoices();
//            passagesListView.requestLayout();

            passages.remove(selectedItemPos);
            deleteButton.setEnabled(false);
            selectedItemPos = -1;

            passagesViewAdapter.notifyDataSetChanged();
        }}
}

我还遇到了一些问题,试图通过setSelected()和getSelectedItemPosition()跟踪选择哪个项目,并通过自己跟踪索引来进行处理。所以,由于我是新手,我确定有一些我不了解的观点,或者其他一些东西,比如对选择如何运作的误解?

如何清除选择?

谢谢!

1 个答案:

答案 0 :(得分:0)

我不知道您的PassagesViewAdapter类是什么样的。也许你可以试试

passagesViewAdapter.remove(passages.get(selectedItemPos));
passages.remove(selectedItemPos);
deleteButton.setEnabled(false);
selectedItemPos = -1;

passagesViewAdapter.notifyDataSetChanged();