我正在使用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;
}
任何想法发生了什么或我做错了什么?
答案 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;
}
希望它会对你有所帮助。