关于方向更改的IllegalArgumentException使用不同的横向和布局布局肖像

时间:2016-05-29 12:19:57

标签: android android-layout android-fragments android-view android-orientation

我有一个Fragment,它在横向和纵向方向上使用不同的布局。在横向模式下,根元素为LinearLayout,而在纵向模式下则为ScrollLayout

RES /布局/ fragment.xml之

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".NewBathingSiteFragment"
    tools:showIn="@layout/activity_new_bathing_site"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/nbs_scrollView">

....

RES /布局脊/ fragment.xml之

<LinearLayout
    android:orientation="horizontal"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".NewBathingSiteFragment"
    tools:showIn="@layout/activity_new_bathing_site"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:id="@+id/nbs_linearLayout">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/nbs_scrollView">


    ...

我在方向更改时收到此错误:

java.lang.IllegalArgumentException: Wrong state class, expecting View State but 
   received class android.widget.ScrollView$SavedState instead. This usually 
   happens when two views of different type have the same id in the same hierarchy. 
   This view's id is id/newBathingSiteFragment. Make sure other views do not use 
   the same id.

两个视图在同一个布局中没有相同的ID(它们在两个不同的布局中具有相同的ID,因为我需要使用findViewById()找到它们)。 ID newBathingSiteFragmentFragment的ID,在活动布局中以XML格式设置。

我能够通过添加LinearLayout作为纵向模式的根元素来解决问题,使结构与横向模式相同(除了在横向模式下还有一个视图显示在LinearLayout旁边的ScrollView

这是首选解决方案吗?或者是否有更好的方法,而不添加&#34;不必要的&#34; LinearLayout到肖像模式?

0 个答案:

没有答案