2017-01-21 25 views
1

私は動的タブを持つ簡単なウェブベーバーを開発しており、ユーザーはこれを追加/削除できます。これを行うには、FragmentPagerAdapterViewPagerTabLayoutを使用します。 2つのタブ(リストに2つのフラグメントを追加)を作成してから2番目のタブを削除すると、すべてがうまく動作し、別のフラグメントをリストに追加できます。私は2を追加し、もみを1つずつ削除し、リストに新しいフラグメントを追加しようとした場合でも、私は例外を受け取る:Android FragmentPagerAdapterはフラグメントのタグを変更できません

java.lang.IllegalStateException: Can't change tag of fragment Page{162e3786 #1 id=0x7f0d007d android:switcher:2131558525:1}: was android:switcher:2131558525:1 now android:switcher:2131558525:0 

各フラグメントはFragmentPagerAdapter内で一意のIDを持っているので、私はthatsのだと思います。 2つのフラグメントはidが0と1になります。最初のアイテムを削除すると(idは0)、新しいアイテムを追加します(idは1になります)。しかし、id 1のアイテムは既に存在しています! idをプログラムで変更する方法や、フラグメントを作成するときにIDを設定する方法はありますか?前もって感謝します!

マイFragmentPagerAdapter

public class PagerAdapter extends FragmentPagerAdapter { 

    private List<Page> fragments; 

    public PagerAdapter(FragmentManager fm, List<Page> pages) { 
     super(fm); 
     this.fragments = pages; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return this.fragments.get(position); 
    } 

    @Override 
    public int getCount() { 
     return this.fragments.size(); 
    } 

    @Override 
    public int getItemPosition(Object object) { 
     int index = pages.indexOf(object); 
     if (index == -1){ 
      return PagerAdapter.POSITION_NONE; 
     } else { 
      return index; 
     } 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     FragmentManager manager = ((Fragment) object).getFragmentManager(); 
     FragmentTransaction trans = manager.beginTransaction(); 
     trans.remove((Fragment) object); 
     trans.commit(); 
    } 
} 

答えて

1

は最後に、検索および試行時間後、私は解決策を見つけました。 getItemId()メソッドをFragmentPagerAdapterに上書きする必要があることを修正するには、各フラグメントに固有のIDを返す必要があります。

関連する問題