2017-09-14 4 views
0

ListViewの複数の項目を長くクリックすると削除しようとしています。私は複数の項目の削除のためのコードを含んでいます。しかし、そのアイテムは削除されません。リストからアイテムを削除し、dbに反映させてください。複数の削除リストビューとsqliteデータベースに反映

ListViewAdapterListViewのアダプタークラスです。
all_memories_getter_setterは、ListViewitemsのゲッター/セッターです。
All_memoriesは複数のアイテムを削除するためのコードを含むMy Javaクラスです。ここで

は私のリストビューアダプターコードです:ここで

package com.example.intel.personaldiary.Adapter; 
import android.app.Activity; 
import android.util.SparseBooleanArray; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

import com.example.intel.personaldiary.All_memories; 
import com.example.intel.personaldiary.R; 
import com.example.intel.personaldiary.all_memories_getter_setter; 

import java.util.ArrayList; 
import java.util.List; 


public class ListViewAdapter extends BaseAdapter { 

public ArrayList<all_memories_getter_setter>list; 
Activity activity; 

/////**///// 
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; 
} 


/////**/////// 
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; 
} 



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; 
} 


} 

は私のゲッターセッターのクラスコードです:

package com.example.intel.personaldiary; 
public class all_memories_getter_setter { 
int id; 
String date; 
String title; 
String content; 
public int getId() { 
    return id; 
} 
public void setId(int id) { 
    this.id = id; 
} 
public String getDate() { 
    return date; 
} 
public void setDate(String date) { 
    this.date = date; 
} 
public String getTitle() { 
    return title; 
} 
public void setTitle(String title) { 
    this.title = title; 
} 
public String getContent() { return content; } 

public void setContent(String content) { this.content = content; } 

} 

は、ここに私の複数の削除コードクラスです:

public class All_memories extends Activity { 
ListView listview; 
ArrayList<all_memories_getter_setter>list; 
ListViewAdapter adapter; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_all_memories1); 


    listview = (ListView) findViewById(R.id.listmemories); 
    populateList(); 
    adapter = new ListViewAdapter(this,list); 
    listview.setAdapter(adapter); 

/////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 = (selected.size() - 1); i >= 0; 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(); 

         } 
        } 

        final ListViewAdapter 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; 
     } 
    }); 

    /////multiple delete on clicking listview/////// 


/////////////////////////////retrieve from db and display in listview 

private void populateList() {  System.out.println("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"); 

    Cursor cs; 
    list = new ArrayList<all_memories_getter_setter>(); 
    SQLiteDatabase mydb; 
    Cursor cursor; 
    mydb=getApplicationContext().openOrCreateDatabase(DataProvider.DATABASE_NAME, Context.MODE_PRIVATE,null); 
    cursor=mydb.rawQuery("Select * from "+DataProvider.TBL_WRITE+"",null); 
    System.out.println("cursor"+cursor.getCount()); 

    cs = getContentResolver().query(DataProvider.WRITE_URI, null, null, null, null); 
     System.out.println("$$count is" + cs.getCount()); 

    System.out.println("size of list" + list.size()); 
    System.out.println("ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"); 
    list = new ArrayList<all_memories_getter_setter>(); 
    // Cursor cs = getContentResolver().query(DataProvider.REM_URI, null, null, null, null); 
    System.out.println("ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"); 
    //cs.moveToFirst(); 
    while (cs.moveToNext()) { 

     int a; 

     int id = cs.getInt(cs.getColumnIndex(DataProvider.ID)); 
     System.out.println("**id" + id); 
     String str_date = cs.getString(cs.getColumnIndex(DataProvider.DATE)); 
     String str_title = cs.getString(cs.getColumnIndex(DataProvider.TITLE)); 
     String str_content = cs.getString(cs.getColumnIndex(DataProvider.CONTENT)); 
     //String str_spi = cs.getString(cs.getColumnIndex(DataProvider.TYPE)); 
     //String str_remi = cs.getString(cs.getColumnIndex(DataProvider.REM)); 

     System.out.println("$$name is" + str_date); 
     System.out.println("$$name is" + str_title); 
     System.out.println("$$name is" + str_content); 
     //System.out.println("$$name$$ is" + str_remi); 

     Log.e("NAME_MAIN", str_date); 
     all_memories_getter_setter all_memories_getter_setter = new all_memories_getter_setter(); 
     // all_memories_getter_setter.setId(id); 
     //details.setName(str_name); 
     all_memories_getter_setter.setDate(str_date); 
     all_memories_getter_setter.setTitle(str_title); 
     all_memories_getter_setter.setContent(str_content); 
     //details.setRemtype(str_remi); 
     // details.setRem(str_rem); 
     list.add(all_memories_getter_setter); 

     System.out.println("temp1 values" + list); 
       //Toast.makeText(getApplicationContext(), THIRD_COLUMN, Toast.LENGTH_LONG).show(); 


    }    } 

/////////////retrieve from db and display in listview//////// 

答えて

0

あなたが試すことができますこのようなもの

https://github.com/afollestad/drag-select-recyclerview

+0

これは私が望むものではありません。私はリストビューから、またdbからも削除しなければなりません。私は削除のためのコードを含んでいます。しかし、リストビュー内の項目は削除されません。 – bubbly

+0

最終的なListViewAdapterアダプタをリセットする理由=新しいListViewAdapter(All_memories.this、list); listview.setAdapter(アダプタ);リストデータは変更されません。コードからこれらの2行を削除する必要があります。 –

+0

リスト項目が削除されました。 Bt私は再びそのページを開き、削除された項目はまだそこにあります。 – bubbly

関連する問題