当前位置: 首页 > 知识库问答 >
问题:

Android-当应用程序在后台时,回收器视图会调整大小

凤经国
2023-03-14

我的应用程序上有一个非常奇怪的bug。每次我打开我的应用程序时,我的视图都能正常工作,但当我尝试将我的应用程序放在后台并再次打开我的应用程序时,我的回收器视图会调整大小。

下面是一幅恰当描述它的图片:

这是正确的图像:

这是当应用程序在后台时弄乱我的回收器视图的图像,然后我再次打开它。

有时候我的回收视图中的所有图像都不见了。这是一个截图:

这是我的onResume()代码:

public void onResume()
 {
   Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
   if (fragment instanceof MenuFragment)
   {
     FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
     transaction.remove(fragment);
     transaction.commit();
     transaction = getSupportFragmentManager().beginTransaction();
     transaction.replace(R.id.fragment_container, fragment);
     transaction.addToBackStack(null);
     transaction.commit();

   }
 }

这是我的视图页面布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/app_background">
    <android.support.constraint.ConstraintLayout
        android:id="@+id/action_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <include
            android:id="@+id/nav_bar"
            layout="@layout/home_screen_navigation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    </android.support.constraint.ConstraintLayout>

    <com.yotadevices.widget.RtlViewPager
        android:id="@+id/menuFragment_viewPager"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@android:color/transparent"
        app:layout_constraintBottom_toTopOf="@+id/buttons"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/nav_bar"/>
    <include
        android:id="@+id/buttons"
        layout="@layout/navigation_layout"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/menuFragment_viewPager" />
</android.support.constraint.ConstraintLayout>

这是我的列表布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent"
    android:orientation="vertical">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>
</android.support.constraint.ConstraintLayout>

你认为这里有什么问题?

PS:该错误仅发生在选定的手机上。并非全部。我们已经在三星Galaxy s8上测试过了,它运行良好。

共有3个答案

庄欣然
2023-03-14

>

if (!(fragment instanceof MenuFragment)) {
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    Fragment menuFragment = new MenuFragment();
    // pass any data...
    transaction.replace(R.id.fragment_container, menuFragment);
    transaction.addToBackStack(null);
    transaction.commit();
}

在您的onResume()onPance()中添加Log. d(TAG,“方法名称”)可能会帮助您了解正在发生的事情。

此外,检查Tools中的视图层次结构

启用设置

如果我做错了什么,请告诉我。如果这些对你有用,也请告诉我。

阎修明
2023-03-14

如果只使用单子视图,最好使用框架布局。然后在RecyclerView中,在layout属性中使用match\u父参数,因此您的代码应该如下所示:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</FrameLayout>

顺便说一下,我调试此类场景的最佳方法是在每个视图中编写android:background=“#0000FF”,看看它是如何膨胀的。

相高谊
2023-03-14

我通过破坏部分包含的布局来解决这个问题。因此,我没有添加包含的布局,而是将所有包含的内容转移到主XML布局中。

即使这样解决了问题,我仍然不知道为什么这个bug会首先出现。

 类似资料: