首页 > 解决方案 > 从一个片段导航到另一个片段时,第二个片段重叠

问题描述

单击一个按钮,我想从一个片段导航到另一个片段。问题是当我按下按钮时,第二个片段与另一个片段重叠。我搜索了一些答案,但在我的情况下似乎没有。我尝试添加背景颜色,但它仍然重叠。所以在我点击按钮后,会发生以下事情:一种 乙

这是我的代码:

我给第一个片段一个 ID:

    <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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"
tools:context=".ui.home.HomeFragment"
android:background="#FFF">

<FrameLayout
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="1dip"
    app:layout_constraintBottom_toTopOf="parent"
    android:background="#FFF"/>

按钮的ID为:nextFragment

第一个片段的类内的代码是:

        nextFragment = v.findViewById(R.id.nextFragment);
        nextFragment.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v){
            Fragment fragment = new NotificationsFragment();
            FragmentManager fragmentManager = getParentFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.fragment_container, fragment)
                    .addToBackStack(null)
                    .commit();
        }
    });

希望我提供了足够的信息,如果不是,请不要犹豫,要求更多!提前致谢。

标签: androidandroid-fragments

解决方案


问题是您将其fragment_container用作第一个片段而不是第一个片段的容器。

在您MainActivity的容器中,您必须加载您的第一个片段。不要将其用作片段。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if(savedInstanceState == null) {
        Fragment firstFragment = new YourFirstFragment();
        FragmentManager manager = getFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.replace(R.id.fragment_container, firstFragment);
        transaction.commit();
    }
}

之后,在您的第一个片段中,当您替换片段时,它会很好地工作。


推荐阅读