我正在使用基本活动模板开发一个 Android 项目。 Android studio 提供了MainActivity 和两个fragment(以及一个额外的contents_main 布局)。 MainActivity 布局有一个浮动操作按钮 (FAB),当应用程序启动时,第一个片段在 MainActivity 中可见。第一个片段布局还有一个“下一个”按钮,可导航到第二个片段。
我想 **使用 FAB 按钮导航到第二个片段 **(如下一个按钮)。我尝试使用这个(来自另一个问题)但应用程序崩溃了。
Intent intent = new Intent(MainActivity.this, SecondFragment.class);
startActivity(intent);
我还尝试了以下由 Bing (AI) 搜索的解决方案来导航到第二个片段,它确实有效。然而,当我**按 **后退按钮时,它会将我带回(空白)MainActivity,并且第一个片段以某种方式被删除?,这意味着它的内容不存在。当我 **单击 **第二个片段中的“上一个”按钮时,应用程序崩溃了。
binding.fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
// Test fragment navigation
Fragment newFrag = new SecondFragment();
// using fragment transaction to replace fragments.
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.layout_content_main, newFrag);
transaction.addToBackStack(null);
transaction.commit();
}
});
有人可以帮我解决这个问题吗?如何使用 FAB 按钮从 MainActivity 导航到第二个片段而不删除第一个片段?
PS:我知道我可以将 fab 移动到fragment_first 布局文件,然后将代码从下一个按钮 onclick 侦听器复制到 fab 按钮上的单击侦听器中,并且它可以工作,但我也想学习另一种方式,如果它存在。 TY.
null
中传递了
addToBackStack
,因此在从
FirstFragment
到
SecondFragment
进行交易时,它不会将您的第一个片段保留在后台堆栈中。为了满足您的要求,只需更改 fab 按钮单击方法中的代码,如下所示,该方法将
FirstFragment
内部添加到片段事务的后退堆栈中,当您从
SecondFragment
单击后退按钮时,它将打开后退堆栈片段。
Fragment newFrag = new SecondFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.layout_content_main, newFrag);
// Here we are adding the first fragment in the back stack for the stack amagement
transaction.addToBackStack("FirstFragment");
transaction.commit();