7

所以我在这里有这段代码,我正在创建一个新的片段并用另一个片段替换它。效果很好。但是我注意到在第一行调用了构造函数,但没有调用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();

将不胜感激任何帮助,以使其与未注释的第二行一起使用。

4

3 回答 3

4

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

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。

于 2014-07-25T13:05:03.300 回答
4

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

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

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

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
}
于 2015-09-20T15:38:10.657 回答
0

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

于 2015-10-02T11:58:31.017 回答