お世話になっております。
Androidアプリで、
1 ローカルDBからデータ取得
2 ListViewに一覧表示
3 list長押しでActionBarの部分に削除ボタン表示
4 OkでDBから削除、画面再描画で対象データが非表示に、
というアプリを作ろうとしています(Gmailアプリみたいな動作です)。
ここで今、4番の削除後の画面再描画のところで詰まっています。
「ListView 更新」などで調べるとnotifyDataSetChanged
がよくヒットするので試してみても、変わりません。
削除後、別画面に遷移して戻ってもう一度Listを構築すれば、削除したデータは一覧に出ませんが、
Gmailアプリみたいに削除したらすぐに一覧から消えるようにするには、どうしたらいいのでしょうか。
稚拙ですが、主だった部分のコードを載せます(メソッドの中身はところどころ省略)。
SQliteはActiveAndroidで操作しています。
Adapterを操作せずに直接DeleteしているからnotifyDataSetChanged
が効かないと思うのですが、
ActiveAndroidを使うと下記のような書き方しか思いつかず。。
Java
1# モデル定義 2@Table(name="Members") 3public class Members extends Model{ 4 @Column(name="Name") 5 public String Name; 6}
java
1 2public class MyListItem{ 3 ... 4 public Long getId() { return id; } 5 public String getName() { return name; } 6 ... 7} 8
Java
1public class MySampleList extends AppCompatActivity { 2 3 protected MyListItem myListItem; 4 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 ... 8 final List<MyListItem> lists = new ArrayList<>(); 9 List<Members> members = new Select().from(Members.class).orderBy("id DESC").execute(); 10 for(Members member : members){ 11 myListItem = new MyListItem( 12 member.getId(), 13 member.Name 14 ); 15 lists.add(myListItem); 16 } 17 18 MyBaseAdaptor mba = new MyBaseAdaptor(this, lists); 19 ListView mlist = (ListView) this.findViewById(R.id.mListView); 20 mlist.setAdaptor(mba); 21 22 mlist.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 23 @Override 24 public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) { 25 26 final ActionBar actionBar = getSupportActionBar(); 27 startActionMode(new ActionMode.Callback() { //List長押しでActionMode 28 ... 29 @Override 30 public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 31 switch (item.getItemId()){ 32 case R.id.icon_discard: // 削除アイコンを押した場合 33 Long member_id = lists.get(position).getId(); 34 new Delete().from(Members.class).where("id = ?", member_id).execute(); 35 //このあたりで notifyDataSetChanged ? 36 return true; 37 } 38 return false; 39 } 40 } 41 } 42 }); 43 } 44 45 public class MyBaseAdaptor extends BaseAdapter{ 46 private Context context; 47 private List<MyListItem> members; 48 49 public MyBaseAdaptor(Context context, List<MyListItem> members) { 50 this.context = context; 51 this.members = members; 52 } 53 @Override 54 public int getCount() { } 55 56 @Override 57 public Object getItem(int position) {} 58 59 @Override 60 public long getItemId(int position) {} 61 62 @Override 63 public View getView(int position, View convertView, ViewGroup parent) {} 64 } 65 66}
アドバイスいただけると幸いです。「ここ見ろ」などサイトの紹介でも結構です。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/03 10:52
2016/04/03 11:19
2016/04/03 14:05
2016/04/03 14:32
2016/04/06 03:03