2016-07-01 32 views
1

私のコードは、タブ付きビューにフラグメントを動的に作成しますが、OnCreateアクティビティが呼び出されるとフラグメントの1つにアクセスしたいと思います。
私は既存のフラグメントを1つずつIDとタグで検索する2つの方法があることを知っています。
フラグメントを作成して後で取り出すようにマークする方法は可能ですか?動的に作成されたフラグメントを取得する

public class MainActivity extends AppCompatActivity { 

    private Toolbar toolbar; 
    private TabLayout tabLayout; 
    private ViewPager viewPager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     viewPager = (ViewPager) findViewById(R.id.viewpager); 

     setupViewPager(viewPager); 

     tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(viewPager); 

     if(extras !=null) { 
      // ***Get Fragment Here*** 
     } 
    } 

    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFragment(new TabFragment1(), "ONE"); 
     adapter.addFragment(new TabFragment2(), "TWO"); 
     viewPager.setAdapter(adapter); 
    } 

    class ViewPagerAdapter extends FragmentPagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 

     public ViewPagerAdapter(FragmentManager manager) { 
      super(manager); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return mFragmentList.get(position); 

     } 

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

     public void addFragment(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return mFragmentTitleList.get(position); 
     } 
    } 

答えて

0

FragmentPagerAdapterはすでにあなたのためにフラグメントをキャッシュしています。各断片は、タグが割り当てられ、その後FragmentPagerAdapterはfindFragmentByTagからの結果がnullの場合、それが唯一のgetItemを呼び出し

findFragmentByTag 

を呼び出そう。したがって、フラグメントを自分でキャッシュする必要はありません。

また、findFragmentByTag()メソッドを使用して、FragmentPagerAdapterであなたのFragmentの参照を取得することもできます。タグの名前は、このように生成される:のviewIdは

0

AmanSinghalの答えは動作しますViewPagerのIDです

private static String makeFragmentName(int viewId, int index) 
{ 
    return "android:switcher:" + viewId + ":" + index; 
} 

を、私は別のアプローチを持っています。現在表示されているフラグメントを返すメソッドでアダプタを作成できます。

は、私は数年前にここでそれを実装:getCurrentPrimaryItem()方法でPublicisedFragmentPagerAdapter ルック

関連する問題