2016-07-01 3 views
1

Мой код динамически создает фрагменты в представлении с вкладками, я хотел бы получить доступ к одному из фрагментов при вызове операции OnCreate.
Я знаю, что существует 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 

Это только вызывает GetItem, если результат от findFragmentByTag равна нулю. Поэтому вам не нужно кэшировать фрагменты самостоятельно.

Кроме того, вы можете получить ссылку на свой фрагмент в FragmentPagerAdapter с помощью метода findFragmentByTag(). Имя тега генерируется следующим образом:

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

где viewId является идентификатор ViewPager

0

ответ AmanSinghal будет работать, у меня есть альтернативный подход. Вы можете создать адаптер с помощью метода, который возвращает отображаемый в данный момент фрагмент.

Я реализовал его здесь несколько лет назад: PublicisedFragmentPagerAdapter Посмотрите на метод getCurrentPrimaryItem()

Смежные вопросы