2016-07-07 115 views
1

后叠加,然后再返回的RecyclerView重绘,并覆盖旧的(你可以看到它的cardviews之间):RecyclerView被改变屏幕方向

enter image description here

问题:如何禁止该行为,以便Android始终重用在开始时创建的RecyclerView?

片段XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:lib="http://schemas.android.com/tools" 
    android:id="@+id/maschine_fragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/maschine_recycler_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:clipToPadding="false" 
     android:scrollbars="vertical" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

</LinearLayout> 

主要XML

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    android:id="@+id/maschineCoordinatorLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:fitsSystemWindows="true" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appBar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.ActionBar"> 

     <include 
      android:id="@+id/toolbar_main" 
      layout="@layout/toolbar"></include> 

    </android.support.design.widget.AppBarLayout> 

    <FrameLayout 
    android:id="@+id/machinelistcontainer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior = "@string/appbar_scrolling_view_behavior" 
    /> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab_cloud_sync_maschinen" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|end" 
     android:layout_margin="@dimen/fab_margin" 
     android:backgroundTint="@color/colorPrimary" 
     android:src="@drawable/ic_cloud_sync_white_48dp" 
     app:borderWidth="0dp" 
     app:elevation="@dimen/fab_elevation" 
     app:rippleColor="#00ffff"/> 

</android.support.design.widget.CoordinatorLayout> 
+0

你在使用片段吗? –

+0

@ 4k3R:是的,我正在使用包含RecyclerView的片段。 RecyclerView被放置在machinelistcontainer – jublikon

+1

那么问题出在哪里,你的片段再次膨胀超过前一​​个片段,我会建议做一些检查,看看片段是否已经膨胀,如果是的话不要膨胀它。 –

回答

4

在你活动的onCreate()方法,检查活动是新开工或正在被系统重新创建。只有当它不被重新创建时,才会将它添加到它。

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    ..... 

    // If savedInstanceState is null, it means that the activity is freshly created 
    if (savedInstanceState == null) { 
     getSupportFragmentManager().beginTransaction() 
      .replace(R.id.machinelistcontainer, new MyFragment()) 
      .commit(); 
    } 
} 
+0

感谢Rohan !! –

0

在AndroidManifest.xml中添加了android:configChanges ATTRS

<activity android:name=".MyActivity" 
      android:configChanges="orientation" 
      android:label="@string/app_name"> 

,然后你可以处理活动的Java代码中onConfigurationChanged()的更改,如

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 
     Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
} 

看到它在android:configChangesHandling Runtime Changes