У меня есть активность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
1753068780
Anonymous
У меня есть активность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).
Как лучше всего инициализировать докладчика, чтобы фрагменты не теряли отношения?
Подробнее здесь: [url]https://stackoverflow.com/questions/50728452/android-mvp-fragments-presenter-and-viewpager[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия