2016-07-01 58 views
1

我的代码在选项卡式视图中动态创建片段,我想在调用OnCreate活动时访问其中一个片段。
我知道有两种方法检索现有的片段,一个是ID,一个是Tag。
如何在碎片被创建后标记碎片以便以后检索?检索动态创建的片段

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 

它只调用的getItem如果从findFragmentByTag结果为空。所以你不应该自己缓存片段。另外,您可以使用findFragmentByTag()方法在FragmentPagerAdapter中获取片段的引用。生成标记的名称是这样的:

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

其中viewId是ViewPager的ID

0

AmanSinghal的回答会的工作,我有一种替代方法。您可以使用返回当前显示片段的方法创建适配器。

我在几年前实现在这里:PublicisedFragmentPagerAdapter 看那getCurrentPrimaryItem()方法