/var/log/messages

Jun 10, 2015 - 2 minute read - Comments - android

ViewPager のページ追加

そんな事できるのだろうか。ただ、参考にさせて頂いているエントリによれば

  • 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 件表示

どうしたものかと思案中。

参考エントリ

本購入 ViewPager の要素の動的な変更

comments powered by Disqus