片段布局的一部分未显示在活动中



我有2 fragments 在我单击第一个片段的fab时,当我在fragment中按下fragment的返回按钮时,它将被第二片片段替换为第二片。将回到碎片第一,但它不会显示布局的一个大部分,请查看此图像以了解问题:

1:应用程序启动

2:当我按下第二片片段后向后按钮,然后又回到第一片

在第一个片段xml中,我有3个主要项目:

   <androidx.coordinatorlayout.widget.CoordinatorLayout 
            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"/>
    <com.google.android.material.appbar.AppBarLayout>
             ...
    </com.google.android.material.appbar.AppBarLayout>
    <androidx.core.widget.NestedScrollView>
             ...
    </androidx.core.widget.NestedScrollView>
    <com.google.android.material.floatingactionbutton.FloatingActionButton/>
    </androidx.coordinatorlayout.widget.CoordinatorLayout >

实际上,nestedscrollview及其子项目从第二片片段回到第一个片段时没有显示。

在片段1st中,我用这些代码开始片段第二:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_first, container, false);
    FloatingActionButton fab = view.findViewById(R.id.fabAddWord);
    fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getFragmentManager()
                    .beginTransaction()
                    .addToBackStack(TAG)
                    .replace(R.id.fragment_container, SecondFragment.newInstance(), 
                            WordSearchFragment.class.getSimpleName())
                    .commit();            
            }
    });
    return view;
}

您应该覆盖on背按摩,并在向后按钮按下时显示第一个片段

@Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() > 1) 
        getFragmentManager().popBackStack();
    else 
       super.onBackPressed();
}

2天后,我解决了问题,问题是我用作 framelayout ,我用作 fragment容器。我学会了将Framelayout用作容器,并在任何地方看到人们使用Framelayout,但实际上,Framelayot并不适合复杂的布局片段。因此,在 mainActivity.xml 中,我将 framelayout 更改为 ConstraintLayOut 和Work!

最新更新