0

У меня есть 3 мероприятия, которые я хочу, чтобы преобразовать на фрагменты, так что я могу реализовать ViewPager красть между ними:Деятельности фрагментов

  1. активностью А (слева)
  2. активностью B (центральный)
  3. активность с (справа)

активность B вызывается из внешней активности и данные передаются к нему в намерении. Теперь активность B передает данные в соответствии с действиями A и C. Когда они запускаются. Идея здесь заключается в том, что B отображает слайд-шоу с ImageView, которое обновляется каждые X секунд, а A и C отображают информацию об отдельных изображениях. Таким образом, здесь мои вопросы:

  1. Как реплицировать эту функциональность с фрагментами, так что, когда я красть из фрагмента В до С и от фрагмента В к А я могу передать соответствующие данные в них. Я в настоящее время сделать это таким образом, с моей деятельности:

    Intent a = new Intent(SlideShow.this,MapsActivity.class); 
    a.putExtra("long", longitude); 
    a.putExtra("lang", langitude); 
    pauseSlideShow(i, timeRemaining); 
    isPaused = true; 
    startActivity(a) 
    
  2. Я прочитал на различиях между FragmentPagerAdapter и FragmentStatePagerAdapter. В настоящее время, когда я запускаю действия A и C из B, я не звоню finish() на B, поэтому, когда я возвращаюсь к нему, он находится в том же состоянии, что и раньше. Однако, поскольку действия A и C поддерживают B, когда я возвращаюсь к активности B из A или C, я заканчиваю их, вызывая finish() на A и C соответственно. Как я могу сделать это с помощью фрагментов?

+0

Я не думаю, что использование ViewPager - это то, что вам нужно, если между действиями передаются намерения, потому что все фрагменты загружаются в ViewPager. Вам нужно будет переписать всю передачу данных без намерений –

+0

Да, мой вопрос: как? – Alk

ответ

0
  1. Если вы используете FragmentPagerAdapter, убедитесь, что при создании фрагмента в getItem() вы сохранить ссылку на фрагмент где-то в адаптере или (предпочтительно) деятельности.

    Создайте метод (т. Е. getLatLong()) фрагмента B, который возвращает данные.

    В фрагменте A в onCreateView() вы получите ссылку на фрагмент B из активности и позвоните по телефону getLatLong(), чтобы получить нужные данные.

  2. Вы можете сохранить свои фрагменты в памяти, позвонив по телефону viewpager.setOffscreenPageLimit(2). Таким образом, фрагмент А, не будет уничтожен, когда вы проводите фрагменту C, потому что ViewPager будет держать два фрагмента слева от фрагмента C, которые ваши фрагменты А и В.

Другой (вероятно, лучше) подход заключается в создании всех трех фрагментов в начале действия и возвращении соответствующего фрагмента при вызове getItem(). Делая это, вы можете использовать setTargetFragment() и getTargetFragment(), чтобы позволить фрагментам получать данные друг от друга. Когда вы это сделаете, помните, что фрагмент может иметь или не иметь пользовательский интерфейс, поэтому, если вы нажимаете данные, а не натягиваете, убедитесь, что метод, принимающий данные, проверяет значение getView() == null.

Смежные вопросы