【发布时间】:2021-03-04 19:37:57
【问题描述】:
我正在开发一个使用片段的 Android 应用程序。 该代码应该执行以下操作:
- 我在 mainActivity 中;
- 这里有一个创建片段的按钮;
- 打开/关闭按钮;
- 我回到mainActivity;
- 我点击按钮并转到创建的片段;
- 开/关按钮已打开;
我试图实现这一点,但它不起作用。在第 5 步中,我相信它每次都会创建一个新片段,因为开/关按钮始终处于关闭状态。
基本上我想要的是回到我最初创建的同一个片段。
这是我拥有的当前代码:
主活动:
public void onStartSensors(View view) {
if(count > 0){
getSupportFragmentManager().popBackStack();
}
else{
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
transaction.add(R.id.container, new StartupFragment());
transaction.addToBackStack(null);
transaction.commit();
count++;
}
}
更新: 在下面的链接中,我得到了我的应用程序当前状态的表示。当我第二次进入片段时,我希望它保持加速度计打开。 https://ibb.co/Sc7QZDt 我已经尝试过 popBackStack() 方法,添加了标签、名称等,但它不起作用。 当我离开片段时,getFragmentByTag() 方法返回 null。
这是代码的当前状态:
public void onStartSensors(View view) {
FragmentManager fm = getSupportFragmentManager();
if(count > 0){
StartupFragment f1= (StartupFragment) fm.findFragmentByTag("A");
FragmentTransaction transaction=fm.beginTransaction();
if( f1 != null) {
transaction.attach(f1);
transaction.addToBackStack("sensors");
transaction.commit();
}
}
else{
StartupFragment f1=new StartupFragment();
FragmentTransaction transaction = fm.beginTransaction();
transaction.add(R.id.container, f1, "A");
transaction.addToBackStack("sensors");
transaction.commit();
count++;
}
}
【问题讨论】:
-
I go back to the mainActivity;从哪里来?也许我错过了一些东西,但根据你的解释,你应该仍然在同一个活动中? -
据我了解,您正在添加要在 Activity 顶部显示的片段,并且您想要某种方式来隐藏和显示它?
-
首先你要在每个函数调用上创建一个新片段,其次如果你想让返回栈工作那么为什么你将 null 传递给 addToBackStack 函数
-
@AsadMukhtar 我已经尝试过使用 null 和标签,但两种方法都不起作用
-
@a_local_nobody 当我说“我回到 mainActivity”时,意味着我离开了片段。
标签: java android android-fragments fragment