У меня есть активность1, которая содержит несколько фрагментов через видоидж. Каждый фрагмент имеет докладчик. For some reason when I rotate the screen, the fragment is recreated and lose the relationship with the presenter
I'm doing the following
[*]open activity 1 (contains viewPager with fragment)
[*]open activity 2
[*]rotate the screen
Press back Кнопка < /li>
< /ol>
Очевидно, что фрагмент воссоздается, и я получаю следующую ошибку < /p>
, вызванная: java.lang.nullpointerExcept .... fragment1.onresume (fragment1.java:72) < /p>
< /blockquote>
my activity1 содержит 2 представления (макет и макет-нормальная ланд) < /strong>
Код активности1 является следующим образом < /p>
) < /strong>
Код активности1 является следующим образом < /p>
< /strong>
.@Override
protected void onCreate(Bundle savedInstanceState) {
...
final ViewPager viewPager = (ViewPager) findViewById(R.id.htab_viewpager);
TabLayout tabLayout = (TabLayout) findViewById(R.id.htab_tabs);
...
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);
< /code>
Код класса ViewPagerAdapter - это следующее: < /p>
private class ViewPagerAdapter extends FragmentPagerAdapter {
private final List mFragmentTitleList = Arrays.asList("Fragment1", "Fragment2");
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
if (position == 0){
Fragment1 fragment = Fragment1.newInstance();
new Presenter1(fragment);
return fragment;
}else if (position == 1){
Fragment2 fragment = Fragment2.newInstance();
new Presenter2(fragment);
return fragment;
}
return null;
}
@Override
public int getCount() {
return mFragmentTitleList.size();
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
< /code>
Код каждого фрагмента является следующим < /p>
public class Fragment1 extends Fragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Retain this fragment across configuration changes.
setRetainInstance(true);
}
@Override
public void onResume() {
super.onResume();
mPresenter.subscribe();
}
@Override
public void onPause() {
super.onPause();
mPresenter.unsubscribe();
}
@Override
public void setPresenter(@NonNull Presenter1 presenter) {
mPresenter = checkNotNull(presenter);
}
....
}
< /code>
Код каждого предписания < /p>
public class Presenter1 {
private final Fragment1 view;
public PerfilAlumnoCalificacionesPresenter(Fragment1 view ....) {
....
this.view = view
this.view.setPresenter(this);
}
....
}
< /code>
Как это исправить? Я не понимаю, почему фрагмент воссоздан, если он содержит setretainInstance (true).
Как лучше всего инициализировать докладчика, чтобы фрагменты не теряли отношения?
Подробнее здесь: https://stackoverflow.com/questions/507 ... -viewpager
Android - MVP - фрагменты, докладчик и видоискатель ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Библиотека подкачки Android показывает пустой видоискатель, когда список пуст
Anonymous » » в форуме Android - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-