Android-使用片段时处理方向变化

Android-使用片段时处理方向变化,android,user-interface,orientation,Android,User Interface,Orientation,我制作了两个布局文件——一个用于纵向布局,另一个用于横向布局。这里是肖像: <?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:ori

我制作了两个布局文件——一个用于纵向布局,另一个用于横向布局。这里是肖像:

<?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>
在NewsListFragment类中,我正在检查ViewNewsFragment是否可用。如果没有,并且用户点击了列表项,则将启动一个新的活动(即ViewNewsActivity)。如果可用,数据将显示在现有片段中。所以有两类:1。ViewNewsActivity和2。ViewNewsFragment

   <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>
但我真正想要的是改变方向上的布局。当设备从纵向切换到横向时,我希望具有典型的双窗格布局;如果设备从横向切换到纵向,我希望仅显示列表,详细信息应作为单独的“视图”查看

   <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>
但如何做到这一点呢?到目前为止,无论是在横向还是纵向启动应用程序,它都可以正常工作。但当您更改方向时,布局仍保持初始设置

   <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>
我真的很感激任何帮助:)! 多谢各位

   <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>
延斯

   <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>
但如何做到这一点呢?到目前为止,无论是在横向还是纵向启动应用程序,它都可以正常工作。但当您更改方向时,布局仍保持初始设置

   <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>
Android会在方向改变时自动销毁并重新创建您的活动,因此每次调用
onCreate()
都会得到正确的布局

   <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>

如果您没有遇到这种情况,那么您采取了一些措施来阻止它,例如在清单中的
添加一个
android:configChanges
属性。

是的,但我不会重新加载活动。我只想删除一个片段。@user1177708:请允许Android销毁并重新创建您的活动。如果希望保留新旧活动之间的片段,请使用
FragmentTransaction
创建它们,并让片段调用
setRetainInstance(true)
   <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>