【问题标题】:Return to a fragment already created返回到已经创建的片段
【发布时间】:2021-03-04 19:37:57
【问题描述】:

我正在开发一个使用片段的 Android 应用程序。 该代码应该执行以下操作:

  1. 我在 mainActivity 中;
  2. 这里有一个创建片段的按钮;
  3. 打开/关闭按钮;
  4. 我回到mainActivity;
  5. 我点击按钮并转到创建的片段;
  6. 开/关按钮已打开;

我试图实现这一点,但它不起作用。在第 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


【解决方案1】:

在我看来,您想添加一个片段以显示在当前活动的顶部,该活动能够按需隐藏和显示。查看您的代码,每次“显示”片段时,您都在创建一个新的StartupFragment,因此您遇到的行为是有意义的。

所以我建议在活动开始时添加片段,然后使用FragmentTransaction.show(Fragment)FragmentTransaction.hide(Fragment) 来切换它的可见性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    相关资源
    最近更新 更多