そんな事できるのだろうか。ただ、参考にさせて頂いているエントリによれば
- adapter.getAll で ArrayList 取得して
- そこからデータの追加や削除を行ない
- 操作した ArrayList を adapter.addAll で追加して
- ViewPager#setAdapter すれば良い
模様。もう少し色々ヤッておく必要があるようですが、本当にこんなので何とかなるのかなぁ。
なんとなく、先日作った GCM な通知サンプルにひっかけてみました。
追加
通知着信契機にて。とりあえず GcmIntentService から BroadcastIntent 投げて Acrivity で取ります。で、onReceive にて
@override
public void onReceive(Context c, Intent i) {
Bundle extras = i.getExtras();
final String id = extras.getString("id");
new Handler().post(new Runnable() {
@Override
public void run() {
Receipt item = new Item(Integer.parseInt(id));
mAdapter.addItem(item);
mAdapter.notifyDataSetChanged();
}
});
}
みたいなカンジで出ました。ちなみに IntentService#onHandleIntent から sendBroadcast する時には
- 引数の intent の getExtras() で Bundle なオブジェクト取得
- Bundle なオブジェクトから getString(“message”) にて通知発信されたナニを取得して Broadcast な Intent に設定
- それ以前にサーバサイドからは
{data: {message: "hoge"}}
な形で通知発信
という実装を盛り込んでいます。
削除
Fragment にボタンを仕込んでおいて削除の確認もしました。クリックしたら onFragmentInteraction を呼んであげて
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mListener.onFragmentInteraction(mParam2);
}
});
mParam2 ですが、Fragment 作る時に以下なカンジで int なソレを渡しています。定義はアダプタになります。
@Override
public Fragment getItem(int i) {
Receipt item = mList.get(i);
return BlankFragment.newInstance("Fuga: ", item.getId());
}
Fragment 側の定義は略します。話を元に戻しまして削除ボタンクリック時には Activity 側のメソドに制御が移り、以下で事足ります。
@Override
public void onFragmentInteraction(int id) {
mAdapter.removeItem(id);
mAdapter.notifyDataSetChanged();
}
アダプタ側でリストを走査して id なデータを削除する処理を追加しています。もう少し良い方法が無いものか。
追記
削除のあたりで地雷を踏んでいます。別途エントリを作成予定です。
そして 0 件表示
どうしたものかと思案中。