Android - обработка изменений ориентации при использовании фрагментов - PullRequest
0 голосов
/ 31 января 2012

Я сделал два файла макета - один для портрета и один для ландшафта. Здесь для портрета:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="horizontal" >

   <fragment
       android:id="@+id/fragment_newslist"
       android:name="com.app.NewsListFragment"
       android:layout_width="0dp"
       android:layout_height="match_parent"
       android:layout_weight="1" >
   </fragment>

</LinearLayout>

Здесь для ландшафта:

   <fragment
       android:id="@+id/fragment_newslist"
       android:name="com.app.NewsListFragment"
       android:layout_width="0dp"
       android:layout_height="match_parent"
       android:layout_weight="1" >
   </fragment>

   <fragment 
       android:id="@+id/fragment_viewnews"
       android:name="com.app.ViewNewsFragment"
       android:layout_width="0dp"
       android:layout_height="match_parent"
       android:layout_weight="2" > 
   </fragment>

Затем я создал Activity, которая загружает макет в методе onCreate (). Пока это работает нормально, конечно. Это занятие не содержит больше кода, чем это.

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_news);
}

Внутри класса NewsListFragment я проверяю, доступен ли ViewNewsFragment. Если нет, и пользователь нажал на ListItem, то будет запущено новое действие (то есть ViewNewsActiviy). Если он доступен, данные будут отображаться в существующем фрагменте. Итак, есть два класса: 1. ViewNewsActivity и 2. ViewNewsFragment

Но на самом деле я хочу изменить макет при изменении ориентации. Когда устройство поворачивается из портретного в альбомное, я хочу иметь типичную двухпанельную компоновку, а если оно поворачивается из альбомного в портретное, я хочу показать список исключительно, а детали следует рассматривать как отдельный «вид».

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

Я действительно ценю любую помощь :)! Большое спасибо!

Jens

1 Ответ

1 голос
/ 31 января 2012

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

Android автоматически уничтожает и воссоздает вашу активность при изменении ориентации, и поэтому каждый вызов onCreate() дает правильный макет.

Если этого не происходит для вас, значит, вы что-то сделали, чтобы остановить его, например, добавив атрибут android:configChanges к <activity> в манифесте.

...