我有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!