У меня есть Activity
, и он имеет ViewPager
. Этот ViewPager
загружает Fragments
используя Adapter
. Мой каждый фрагмент считается Раздел (согласно функциональности приложения). Сначала я загрузить все ViewPager
элементы один раз,Фрагмент не разрушен, но onCreateView называется
viewPager.setOffscreenPageLimit(sectionList.size()); //sectionList is nothing but number of framgents
В фрагменту У меня есть функция под названием setup
вызывается из Adapter
класса при создании фрагмента.
InvestigationFragment
public void setup(SectionView sectionView, int pos) {
this.sectionView = sectionView;
this.pos = pos;
}
InvestigationAdapter
@Override
public Fragment getItem(int pos) {
InvestigationFragment investigationFragment = new InvestigationFragment();
investigationFragment.setup(sectionViewHashMap.get(keys.get(pos)), pos);
fragments.add(investigationFragment);
return investigationFragment;
}
Здесь SectionView
является абстрактным классом продлен класса SimpleSection
. И SimpleSection
добавляет пользовательские представления внутри него. Пользовательские представления похожи на классы классов 20-30.
public abstract class SectionView {
public Section mSection;
public Context mContext;
public LinkedHashMap<Integer, SectionView> subSectionViews;
public LinkedHashMap<Integer, FieldWidget> fieldWidget;
public int actionSaveId;
protected LinearLayout sectionView;
protected Toolbar toolbar;
public final void initialiseSection(Toolbar toolbar) {
this.toolbar = toolbar;
createFields();
createSubSection();
}
public final void buildSection(LinearLayout v) {
sectionView = v;
addFields();
addSubSection();
}
protected abstract void createFields();
protected abstract void createSubSection();
protected abstract void addFields();
protected abstract void addSubSection();
public abstract boolean hasSubSection();
public abstract boolean validateSection();
protected abstract boolean persistSection();
public final boolean saveSection() {
boolean isSaved = true;
if (!validateSection()) {
isSaved = false;
} else if (!persistSection()) {
isSaved = false;
}
return isSaved;
}
}
Все в порядке, пока здесь. Но в некоторых сценариях SectionView имеет значение null, где я не могу его сохранить. Вот сценарий,
У меня есть собственная реализация камеры, из фрагмента, я открываю свой собственный фотоаппарат (без разрушения фрагмента или активности), захват изображения, и я вернусь к фрагменту
onCreateView()
называют иногда, такsectionView
идет null. Когда я отлаживается, ни один из методов жизненного цикла не называется (например,onDestroyView()
,onDestroy()
,onDetach()
,onLowMemeory()
,). Тогда как можно назватьonCreateView()
?В Nexus 9 при изменении разрешений времени выполнения это произошло. Я буду в
Fragment
, Прокрутите вниз строку состояния> перейдите в Настройки> Приложения> Разрешения для приложений> Местоположение> Разрешить разрешение на размещение. Если я предоставить разрешение не будет врезаться, но если я отзывать объект sectionView будет нулевым
WEIRD ПОВЕДЕНИЕ: Для проверки 2-й сценарий, я подключен отладчик, чтобы убедиться, фрагмент/активность уничтожается или нет при аннулировании разрешения Location
. Как только я отозвал разрешение на размещение, отладчик отключился и приложение было убито/DEAD. Это происходит, когда я отменяю любые разрешения.
Теперь, как я могу убедиться, что объект sectionView
сохранен или не уничтожен?
Спасибо за ответ, позвольте мне поработать над этим и сообщить вам –
Оки, я посмотрел на ваш ответ. Но у меня есть проблема, поскольку я упоминал, что «SectionView» является ** AbstractClass **. Я расширяю этот абстрактный класс во многих моих пользовательских классах просмотра. Если я создаю класс 'SectionView', реализующий интерфейс« Serializable », тогда я должен сделать все остальные классы, которые расширяются, это также должно реализовывать« Serializable »правильно? Если я этого не сделаю, тогда он бросит меня «NotSerializableException»! Например: 'Caused by: java.io.NotSerializableException: android.support.v7.widget.AppCompatEditText'. В одном из моих пользовательских представлений есть 'AppCompatEditText'. Что я должен сделать для этого? –
Я только что отредактировал свой вопрос, немного кратко о части абстрактных классов. Мой абстрактный класс расширен другим классом, где он добавляет в него пользовательские представления. Поэтому я не думаю, что это поможет. Думаю, мне нужно переструктурировать. Но любые предложения или решения приветствуются, пожалуйста ... –