リストビューには多くのアイテムが含まれています。リストビュー項目で複数の削除を行っていますが、リストビューから2番目または3番目の項目だけを選択すると、選択した項目ではなくリストの最初の項目が削除されます。 私はこの男を解決するために手伝ってください。ここリストビューのアイテムを削除する最初のアイテムのみを削除する
/////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()'を呼び出すことによって実現できます。アダプターは1回だけ設定してください。 'populateList()'は何をしますか?あなたもこれらの詳細を投稿する必要があります – Raghunandan
@ Raghunandanよく言われました。 –
populatelist()は私のリストビューアイテム関数です。私がdatを入力すると、リストとして設定されます。 – teddy