替换不调用onAttach,onCreate,onCreateView等活动中的片段

时间:2014-07-25 12:38:14

标签: java android fragment fragmentmanager

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

非常感谢任何有助于解除第二行注释的帮助。

2 个答案:

答案 0 :(得分:4)

onAttach()实际提交更改之前,不会调用onCreate()FragmentManager等。因此,在转换调用commit()之后的某个时间。如果您需要从一开始就将URL传递给Fragment,请在调用commit()之前将其添加到片段的参数包中。然后,您就可以访问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()获取捆绑包并检索您的活动传递的网址。

答案 1 :(得分:0)

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