1

我正在使用 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;
}

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

4

2 回答 2

1

用这个

xml 文件:https ://www.dropbox.com/s/eky9zb275mgt4py/activity_list__addand_delete.xml

java文件:https ://www.dropbox.com/s/idqyyosbutgqqbs/List_AddandDelete.java

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

于 2013-06-05T09:04:37.513 回答
0

我已经看到您的代码并理解该问题,当您从 List 中删除项目时,您会得到 -1 索引,因为该项目在该列表中不存在,因此请更改您的代码,请尝试此操作。

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

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

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

    return true;
}

希望它会帮助你。

于 2013-06-05T09:03:32.930 回答