ListView所选位置始终重置

时间:2013-06-05 08:12:24

标签: android android-listview

我正在使用ListView尝试添加/删除项目。添加位相当容易,但删除虽然证明是棘手的。 我正在考虑使用多选列表,但是从更简单的事情开始,我选择了单一选择模式来测试它。 我有一个包含项目的字符串数组,一个数据适配器,用于在数据发生变化时通知。

    expenseAdapter=new ArrayAdapter<String>(this,
                                            android.R.layout.simple_list_item_single_choice,
                                            android.R.id.text1,
                                            expenseList);
    myListView.setAdapter(expenseAdapter); 
    myListView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View item, int position,
                long index) {



            ((ListView)parent).setItemChecked(position, true);

            item.setSelected(true);
        }

    });

我还为onClick事件添加了一个监听器。视觉上选择/取消选择该项目的问题是,当我单击触发删除项目的按钮时,列表中的所选索引始终为-1,尽管该项目似乎已被选中。

使用onClick事件删除按钮

public boolean doDelete(View view)
{
    ListView myListView= (ListView)findViewById(R.id.list);
    String s=(String)myListView.getSelectedItem();

    expenseList.remove(s);
    expenseAdapter.notifyDataSetChanged();

    return true;
}

任何想法发生了什么或我做错了什么?

2 个答案:

答案 0 :(得分:1)

使用此

xmlfile:https://www.dropbox.com/s/eky9zb275mgt4py/activity_list__addand_delete.xml

javaFile:https://www.dropbox.com/s/idqyyosbutgqqbs/List_AddandDelete.java

当您将焦点转移到按钮时,您的选择(焦点)将被删除。

答案 1 :(得分:0)

我已经看到你的代码并且理解了这个问题,当你从List中删除项目时你得到-1索引,因为该项目不存在于该列表中所以更改你的代码请试试这个。

我将 getSelectedItem()更改为 getSelectedItemId(),此处它将返回所选项目ID而不是项目,因此您可以根据项目ID从列表中删除该项目是列表中项目的索引。

public boolean doDelete(View view)
{
    ListView myListView= (ListView)findViewById(R.id.list);
    long id = myListView.getSelectedItemId();

    expenseList.remove(id);
    expenseAdapter.notifyDataSetChanged();

    return true;
}

希望它会对你有所帮助。