当我将屏幕方向从垂直更改为水平然后再返回时,RecyclerView会重新绘制并覆盖旧的(您可以在cardviews之间看到它):
问题:我如何抑制这种行为,以便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 :(得分: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();
}
}
答案 1 :(得分:0)
在AndroidManifest.xml中添加android:configChanges attrs
<activity android:name=".MyActivity"
android:configChanges="orientation"
android:label="@string/app_name">
然后你可以在Activity 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();
}
中查看