Как я могу использовать фрагменты для создания макета на изображении - PullRequest
0 голосов
/ 27 декабря 2011

Вот снимок экрана с изображением:

enter image description here

Мой вопрос: как мне реализовать показанный макет стека?Я просмотрел файлы ресурсов, и в большинстве из них показано, как реализовать два фрагмента.

Кто-нибудь может привести пример того, как я могу создать фрагмент стека, как показано?

Буду признателен.Благодаря.

Ответы [ 2 ]

2 голосов
/ 27 декабря 2011

Если ваши фрагменты тесно связаны между собой, просто не запускайте их в отдельных действиях. Для случая с одной панелью вы можете просто переключать фрагменты в пределах одного действия.

В противном случае, если вы хотите разделить их между действиями, вам нужно использовать модель onActivityResult () для распространения результатов обратно, а в случае двойной панели «эмулировать» ее, просто выполнив второй вызов onActivityResult () из первый фрагмент. Обратите внимание, что Fragment.setTargetFragment () включает аргумент кода запроса, чтобы облегчить это.

I have activity A loading Fragment F1 which loads fragment F2

ИМХО, фрагменты не должны загружать другие фрагменты. Действия загружают фрагменты, основываясь на доступном пространстве экрана. Фрагменты не должны ни знать, ни заботиться о том, существует ли какой-либо другой фрагмент в текущем действии или другие фрагменты присутствуют в других действиях.

I have F2 calling back to activity A to pop it off of the stack. Should I then be looking at passing a message to F1 to do what it needs to do?

Да.

What I'm wondering is whether I'm on the right track with regards passing messages back and forwards via the parent activity or is there a more direct way of F1 responding to F2 performing something that requires it to be closed and F1 do what it needs to do.

Я не хотел бы, чтобы F1 даже знал, что F2 существует, или наоборот. Когда пользователь делает что-то в F1, что должно привести к значительному сдвигу контекста (например, отобразить какой-то другой фрагмент / активность), F1 должен сообщить об активности хостинга, возможно, через интерфейс слушателя, зарегистрированный в F1 (для поддержки нескольких возможных действий хостинга) , Затем действие будет организовано для появления F2 либо в его собственном действии, либо в другом действии. Точно так же, когда F2 завершает работу, он сообщает об активности своего хостинга через интерфейс слушателя, и это действие может перенаправлять управление обратно в соответствующее место.

Я несколько скептически отношусь к вашему подходу "F2 выполняет действие, которое должно привести к его закрытию", если только F2 не является DialogFragment.

0 голосов
/ 27 декабря 2011

Одно из возможных решений приведено ниже. Пожалуйста, настройте ширину и высоту в соответствии с вариантом использования

Для использования в ландшафте

<LinearLayout android:orientation="horizontal" ..>
   <fragment android:name="com.example.FragmentA"
        android:id="@+id/fa"
        android:layout_width="xdp"
        android:layout_height="match_parent" />
  <LinearLayout android:orientation="vertical" ...>
      <fragment android:name="com.example.FragmentB"
        android:id="@+id/fb"
        android:layout_width="ydp"
        android:layout_height="wrap_content" />
      <fragment android:name="com.example.FragmentC"
        android:id="@+id/fc"
        android:layout_width="zdp"
        android:layout_height="wrap_content" />
  </LinearLayout>
</LinearLayout>

Для портретного просмотра используйте

<LinearLayout android:orientation="vertical" ..>
   <fragment android:name="com.example.FragmentA"
        android:id="@+id/fa"
        android:layout_width="match_parent"
        android:layout_height="Xdp" />
  <LinearLayout 
        android:orientation="horizontal" 
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
      <fragment android:name="com.example.FragmentB"
        android:id="@+id/fb"
        android:layout_width="ydp"
        android:layout_height="wrap_content" />
      <fragment android:name="com.example.FragmentC"
        android:id="@+id/fc"
        android:layout_width="wrap_cotent"
        android:layout_height="wrap_content" />
  </LinearLayout>
</LinearLayout>
...