Фрагменты ViewPager зависят от данных из привязанного сервиса родительского Activity
У меня есть узел активности ViewPager с 5 фрагментами (используя FragmentPagerAdapter). Я должен убедиться, что мои фрагменты заполняют свои представления только тогда, когда данные доступны из родительского действия, а эти данные доступны только после того, как связанный сервис из родительского действия вызовет метод onSeviceConnected.
Итак, я поместил весь код создания вкладок ViewPager, ActionBar, FragmentPagerAdapter,... в метод onServiceConnected, и все работает хорошо, когда первый запуск Activity или когда я уничтожаю и запускаю ее снова. Но когда конфигурация меняется (когда я поворачиваю экран), я отлаживаю свою программу и вижу, что после Activity, вызывающей onCreate, текущий выбранный фрагмент немедленно вызывает onCreateView и, конечно, вызывает проблемы (потому что в это время служба не вызывается, и я не данные для этого фрагмента не готовы!).
Я также пытаюсь использовать прослушиватели событий и заставлять фрагменты заполнять только представления, когда родительская активность уведомляет (когда данные доступны), но из-за использования PagerAdapter я не могу управлять, когда создается фрагмент Представление и, конечно, когда это уместно для него наполнить контент!
Что мне интересно, так это: правильно ли, что когда мы поворачиваем экран, действие будет уничтожено и воссоздано? Если это правда, то почему в этой ситуации Activity не собирается делать то же самое, что и в первый раз? Итак, кто-нибудь может предложить мне идею для этой проблемы?
1 ответ
Если вы можете, обычно вы храните эту информацию в Bundle:
void createMyFragment(value) {
Bundle bundle = new Bundle();
bundle.putParcelable("key", value);
Fragment fragment = new MyFragment();
fragment.setArguments(bundle);
}
@Override
public void onCreate(Bundle bundle) {
value = bundle.getParcelable("key");
}
Если вы не можете сделать это, вы можете, например, в вашем случае переместить вызов viewPager.setAdapter(pagerAdapter)
в onActivityCreated()
вместо того, чтобы делать это в onCreateView()
:
@Override
public void onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
viewPager = (ViewPager) dialogView.findViewById(R.id.viewpager);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
viewPager.setAdapter(new MyPagerAdapter(getActivity()));
}