2017-05-23 8 views
0

私は以下を試しましたが、助けにはなりませんでした。 FragmentPagerAdapterからフラグメントのタグまたはタグを設定するにはどうすればよいですか?フラグメントを後で参照するために、フラグメントタグをFragmentPagerAdapterに追加する方法はありますか?

 @Override 
public Fragment getItem(int position) { 

    MainActivity activity = (MainActivity)mcontext; 

    if (position == 0) { 
     Fragment discoverFragment = new DiscoverFragment(); 
     activity.getSupportFragmentManager().beginTransaction().add(discoverFragment, "discover").commit(); 
     return discoverFragment; 
    } else if (position == 1){ 
     Fragment myFeedFragment = new MyFeedFragment(); 
     activity.getSupportFragmentManager().beginTransaction().add(myFeedFragment, "myfeed").commit(); 
     return myFeedFragment; 
    } else { 
     Fragment filterFragment = new FilterFragment(); 
     activity.getSupportFragmentManager().beginTransaction().add(filterFragment, "filter").commit(); 
     return filterFragment; 
    } 
} 
+0

findFragmentByTag機能を使用することができます[これは参考になる](https://stackoverflow.com/質問/ 16918854/find-fragment-by-tag-in-container) –

答えて

0

使用このSwipeAdapterのインスタンスと

class SwipeAdapter extends FragmentPagerAdapter { 
     private Map<Integer, String> mFragmentTags; 
     private FragmentManager mFragmentManager; 

     private String mPagetile[]; 

     public SwipeAdapter(FragmentManager fm, Context context) { 
      super(fm); 
      mPagetile = context.getResources().getStringArray(R.array.pageTitle); 
      mFragmentManager = fm; 
      mFragmentTags = new HashMap<>(); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      switch (position) { 
       case 0: 
        return new "Your_fragment"; 
       default: 
        break; 
      } 
      return null; 
     } 

     @Override 
     public Object instantiateItem(ViewGroup container, int position) { 
      Object obj = super.instantiateItem(container, position); 
      if (obj instanceof Fragment) { 
       Fragment f = (Fragment) obj; 
       String tag = f.getTag(); 
       mFragmentTags.put(position, tag); 
      } 
      return obj; 
     } 

     public Fragment getFragment(int position) { 
      String tag = mFragmentTags.get(position); 
      if (tag == null) 
       return null; 
      return mFragmentManager.findFragmentByTag(tag); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return mPagetile[position]; 
     } 

     @Override 
     public int getCount() { 
      return "Number of fragments"; 
     } 
    } 

今すぐあなたのアダプタとして、このクラス(int型 "フラグメントの位置")getFramentを呼び出します。 あなたはそれを得ることを願っています。

+0

gettag()メソッドはnullを返します。 fragmentpagerAdapterにTag値を設定する必要がありますか? – Jani

+0

更新された回答を参照してください。 –

1

タグを正しく設定しているようです。とにかく、この方法でうまくいくはずです。

設定タグ:

MyFeedFragment myFeedFragment= new MyFeedFragment(); 
getSupportFragmentManager().beginTransaction().add(R.id.fragmentContainer, myFeedFragment, "myfeed"); 
fragmentTransaction.commit(); 

そしてあなたがタグを検索してそれを得ることができます。

List fragments = getSupportFragmentManager().getFragments(); 

    Fragment discoverFrag = null; 
    Fragment myFeedFragment = null; 
    Fragment filterFragment = null; 

    for (int i = 0; i < fragments.size(); i++) { 
     if (((Fragment) fragments.get(i)).getTag() == "discover") 
      discoverFrag = (Fragment) fragments.get(i); 

     if (((Fragment) fragments.get(i)).getTag() == "myfeed") 
      myFeedFragment = (Fragment) fragments.get(i); 

     if (((Fragment) fragments.get(i)).getTag() == "filter") 
      filterFragment = (Fragment) fragments.get(i); 
    } 
+0

コードを使用したときにエラーが発生しました java.lang.IllegalStateException:onSaveInstanceStateの後にこのアクションを実行できません – Jani

+0

次にこれを試してください。 – tompadre

+0

はあなたの方法を試しました。エラーが発生しました java.lang.IllegalStateException:フラグメントのタグを変更できませんDiscoverFragment {1488c4bd id = 0x7f0d00a8 myfeed}:myfeed now android:switcher:2131558536:0 – Jani

関連する問題