我有一个listview包含很多项目。我在列表视图项目上做了多个删除操作。但是,当我从列表视图中只选择第二个或第三个项目时,它只删除列表中的第一个项目而不是选定的项目。 请帮我解决这个家伙。删除listview项只删除第一项
这里是我的代码:
/////multiple delete on clicking listview///////
listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listview.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode mode,
int position, long id, boolean checked) {
// Capture total checked items
final int checkedCount = listview.getCheckedItemCount();
// Set the CAB title according to total checked items
mode.setTitle(checkedCount + " Selected");
// Calls toggleSelection method from ListViewAdapter Class
adapter.toggleSelection(position);
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.delete:
// Calls getSelectedIds method from ListViewAdapter Class
SparseBooleanArray selected = adapter.getSelectedIds();
// Captures all selected ids with a loop
for (int i = 0; i < (selected.size()); i++) {
if (selected.valueAt(i)) {
all_memories_getter_setter selecteditem = (all_memories_getter_setter) adapter.getItem(selected.keyAt(i));
getContentResolver().delete(DataProvider.WRITE_URI, DataProvider.ID + '=' + list.get(i).getId(), null);
System.out.println("##############values of ss" + list.get(i).getId());
// Remove selected items following the ids
adapter.remove(selecteditem);
}
populateList();
}
adapter = new ListViewAdapter(All_memories.this, list);
listview.setAdapter(adapter);
mode.finish();
return true;
default:
return false;
}
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
// TODO Auto-generated method stub
adapter.removeSelection();
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
return false;
}
});
这里是我的适配器代码: 多个删除列表视图项目在这里我加入了代码。
public class ListViewAdapter extends BaseAdapter {
public ArrayList<all_memories_getter_setter>list;
Activity activity;
/////**///// multiple delete
private SparseBooleanArray mSelectedItemsIds;
public ListViewAdapter(Activity activity, ArrayList<all_memories_getter_setter>list)
{
super();
mSelectedItemsIds= new SparseBooleanArray();
this.activity=activity;
this.list=list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
/////**/////// for multiple delete
public void remove(all_memories_getter_setter object){
list.remove(object);
notifyDataSetChanged();
}
public List<all_memories_getter_setter> getall_memories_getter_setter(){
return list;
}
public void toggleSelection(int position){
selectView(position, !mSelectedItemsIds.get(position));
}
public void removeSelection(){
mSelectedItemsIds = new SparseBooleanArray();
notifyDataSetChanged();
}
public void selectView(int position , boolean value){
if(value){
mSelectedItemsIds.put(position, value);
}else{
mSelectedItemsIds.delete(position);
notifyDataSetChanged();
}
}
public int getSelectedCount(){
return mSelectedItemsIds.size();
}
public SparseBooleanArray getSelectedIds(){
return mSelectedItemsIds;
}
/////**/////// for multiple delete
public class Viewholder
{
TextView txtFirst;
TextView txtSecond;
TextView txtThird;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Viewholder holder;
LayoutInflater inflater = activity.getLayoutInflater();
if (convertView == null) {
convertView = inflater.inflate(R.layout.activity_all_memories_listview, null);
holder = new Viewholder();
holder.txtFirst = (TextView) convertView.findViewById(R.id.list_date);
holder.txtSecond = (TextView) convertView.findViewById(R.id.list_title);
holder.txtThird = (TextView) convertView.findViewById(R.id.list_content);
convertView.setTag(holder);
} else {
holder = (Viewholder) convertView.getTag();
}
holder.txtFirst.setText("" + list.get(position).getDate());
holder.txtSecond.setText("" + list.get(position).getTitle());
holder.txtThird.setText("" + list.get(position).getContent());
return convertView;
}
}
您需要将其从列表中删除。并刷新你的列表视图。通过调用适配器上的'notifyDataSetChanged()'。并设置适配器只有一次。另外'populateList()'做什么?你应该发布这些细节以及 – Raghunandan
@Raghunandan说得好。 –
populatelist()是我的列表视图项目函数。当我输入数据时,它将填充为列表。 – teddy