Фрагменты 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()));
}
Другие вопросы по тегам