Я не знаком с FragmentPagerAdapter
, так что это будет один из тех вопросов, которые мы (вы) критически прочитали.
Структура: У меня есть FragmentPagerAdapter
(код ниже), который будет содержать два фрагмента за раз. Первая показывает выдержки из книги, а вторая - список названий книг.
Цель:. Я хочу достичь того, что описано в названии: пользователь может перейти ко второму фрагменту в пейджер, нажать заголовок, а затем я хочу переместить пользователя обратно первый фрагмент и передать первый фрагмент для обновления текста. Первый фрагмент имеет для этого метод triggerRefresh
.
Код: Я считаю, что моя проблема возникает из-за способа FragmentPagerAdapter
повторного использования/создания фрагментов (которые я не понимаю). Это мой класс:
static class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
switch(position) {
case 0:
return new ExcerptsFragment();
case 1:
return new BookListFragment();
default:
throw new IllegalArgumentException("not this many fragments: " + position);
}
}
}
Вот как я создал соответствующих членов:
ViewPager mViewPager = (ViewPager) findViewById(R.id.pager);
MyFragmentPagerAdapter mFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(mFragmentPagerAdapter);
И это то, что я пробовал в других местах моей деятельности, когда получаю обратный вызов из заголовков книг с фрагментом заголовка:
mViewPager.setCurrentItem(0); // back to excerpts screen page. It OK.
// Here the problem! How to identify the fragment 0
// to ExcerptsFragment and call its triggerRefresh()?!?
Серия проблем:
Вызов адаптера getView()
не будет работать, потому что он вернет новый экземпляр ExcerptsFragment
, который не тот, который в настоящее время подключен (как и ожидалось, генерирует исключение).
Я видел много людей здесь (пример), просто сохраняя фрагменты в getView()
. Это правильно? Потому что, глядя на официальные примеры, мне кажется анти-шаблон (победите автоматическую ссылку, удерживая элементы). И это также мнение здесь и здесь (и выглядит правильно для меня).
Любые предложения? Я не удивлюсь, если я не пойму все это одно...