【问题标题】:Replacing fragments in an activity not calling onAttach, onCreate, onCreateView, etc替换未调用 onAttach、onCreate、onCreateView 等的活动中的片段
【发布时间】:2014-09-17 07:49:41
【问题描述】:

所以我在这里有这段代码,我正在创建一个新的片段并用另一个片段替换它。效果很好。但是我注意到在第一行调用了构造函数,但没有调用onAttach()onCreate() 等。如果我取消注释第二行,它将不起作用,因为 updateItem(URL) 需要在 onCreate() 函数中启动的 webView。

DetailViewFragment detailFragment = new DetailViewFragment();
//detailFragment.updateItem(URL);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.displayList, detailFragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();

如果有任何帮助可以使它与未注释的第二行一起工作,我们将不胜感激。

【问题讨论】:

  • 我相信在片段被提交给 Activity 之前不会调用 onAttach、onCreate 等。所以应该在该代码的最后一行调用它们。关于生命周期的 Android 文档:developer.android.com/reference/android/app/… 您是否尝试过使用 ft.add(...)?

标签: java android fragment fragmentmanager


【解决方案1】:

FragmentManager 实际提交更改之前,不会调用onAttach()onCreate() 等。因此,在转换调用 commit() 之后的一段时间。如果您需要从一开始就将 URL 传递给 Fragment,请将其添加到您调用 commit() 的片段的参数包之前。然后,您将能够访问您的 onCreate() 或其他生命周期方法中的 URL。所以你会想要这样的东西:

DetailViewFragment detailFragment = new DetailViewFragment();
Bundle args = new Bundle();
args.putString(DetailViewFragment.INIT_URL, URL);
detailFragment.setArguments(args);
ft.replace(R.id.displayList, detailFragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();

现在,在您的 onCreate() 中,您可以调用 getArguments() 来获取捆绑包并检索您的活动传递的 URL。

【讨论】:

    【解决方案2】:

    API 级别 23 onAttach(Context context) 有效
    API 级别 22 onAttach(Activity activity) 有效

    实现这两种方法都对我有用:

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
    }
    
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    }
    

    【讨论】:

      【解决方案3】:

      另一种解决方案是在提交之后调用getSupportFragmentManager().executePendingTransactions();。请注意,交易将是同步的。

      【讨论】:

        猜你喜欢
        • 2012-12-28
        • 1970-01-01
        • 2015-12-12
        • 1970-01-01
        • 1970-01-01
        • 2017-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多