【问题标题】:Call a method on Popbackstack()在 Popbackstack() 上调用方法
【发布时间】:2021-11-02 09:17:07
【问题描述】:

我用 Fragment-B 替换 Fragment-A,在 Fragment-B 中调用 popbackstack() 时,我将重定向回 Fragment-A。所以我想调用一个方法来更新列表。

【问题讨论】:

    标签: android android-fragments fragment


    【解决方案1】:

    add 和 replace 的另一个重要区别是:replace 删除现有片段并添加新片段。这意味着当您按下返回按钮时,将创建被替换的片段并调用其 onCreateView。而 add 保留现有片段并添加一个新片段,这意味着现有片段将处于活动状态并且它们不会处于“暂停”状态,因此当按下后退按钮时不会为现有片段调用 onCreateView(在新片段之前存在的片段添加了片段)。对于fragment的生命周期事件onPause、onResume、onCreateView等生命周期事件,replace时会被调用,add时不会被调用。

    简而言之,您需要使用 add ,如果您不希望片段视图重叠,则可以将片段 B 视图背景颜色替换为纯色而不是透明。

    当您添加片段时,您还必须将其添加到片段的后台堆栈中。

    FragmentTransaction ft = getSupportFragmentManager.beginTransaction();
                      ft.replace(R.id.content, fragment, backStateName);
                      ft.addToBackStack(backStateName);
                      ft.commit();
    

    (这里 R.id.content 是您活动中的片段容器)

    然后您必须在包含您的片段的活动中覆盖 onBackPressed 方法。

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

    如果您想自定义您的 onBackPressed,那么您可以检查您的活动中当前可见的片段,并创建一个回调来执行该特定片段的操作。示例 -

        @Override
        public void onBackPressed() {
         if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
                  Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.content);
                  if (fragment instanceof FragmentB) {
                                ((FragmentB) fragment).onBackPressed();
    //                     getSupportFragmentManager().popBackStack();
          }
        }
    

    现在您可以添加 getSupportFragmentManager().popBackStack();在 Fragment 的 onBackPressed() 方法中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-22
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 1970-01-01
      • 2017-09-24
      • 2021-06-30
      • 1970-01-01
      相关资源
      最近更新 更多