15
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

Organization

ViewPagerでのページの削除

android-support-v4のViewPagerで、ユーザーがページを増やしたり減らしたりできる可変長のビューを作る場合の話です。
ページの追加、削除を行うときにはFragmentStatePagerAdapterを使うのはいろんなところで書かれてるので理由とか使い方は割愛します

そのFragmentStatePagerAdapterでページの削除をする時ですが、Activity側で何らかのイベントを受け取って、現在見ているページを閉じるという処理をしたいと思います。単純に書くと

public void removeCurrentPage()
{
    int current = pager.getCurrentItem();
    adapter.remove(current);
    adapter.notifyDataSetChanged();
}

みたいなことになりそうですが、これだとViewPagerに反映されませんでした。あれこれ試行錯誤して最終的にいきついたのは

public void removeCurrentPage()
{
    int current = pager.getCurrentItem();
    adapter.remove(current);
    List<Fragment> list = new ArrayList<Fragment>();
    list.addAll(adapter.getList());
    adapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), list); //Refresh page caches
    pager.setAdapter(adapter);
    pager.setCurrentItem(current, false);
}

adapterから要素を削除したのち、Listを出力してadapterを初期化、改めてListを渡してViewPagerにadapterをセットしなおして元の位置を表示させる
というすごい回りくどい処理をしてますが、これで今のところページの削除は滞り無くできてます

ページの追加のほうは単純にadapterにaddするだけで出来るんですが、削除のほうはViewPager側のキャッシュが残るためこういう処理が必要なんじゃないかと思います。
もしもっといいやり方がありましたら教えて下さい

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
15
Help us understand the problem. What are the problem?