来自Context的FragmentManager

Ste*_*eve 42 android

我创建了一个新View课程.在那个课程中,我需要访问FragmentManager,但我无法弄清楚如何.

我可以FragmentManager从上下文中访问吗?

CustomView extends LinearLayout
Run Code Online (Sandbox Code Playgroud)

Dee*_*eeV 57

仅当给定的Context扩展Activity(After-Honeycomb)或FragmentActivity(pre-honeycomb)时.

在这种情况下,您必须100%确定它是使用反射或try-catch的活动.

try{
  final Activity activity = (Activity) context;

  // Return the fragment manager
  return activity.getFragmentManager();

  // If using the Support lib.
  // return activity.getSupportFragmentManager(); 

} catch (ClassCastException e) {
  Log.d(TAG, "Can't get the fragment manager with this");
}
Run Code Online (Sandbox Code Playgroud)

我以为我推荐重构,所以View实际上只是为了显示内容而不应该实际修改应用程序的状态,但这是我的看法.

  • @LeiLeyba:片段有一个"getFragmentManager()"和"getChildFragmentManager()"方法,所以我不确定你在问什么.如果Fragment没有附加到Activity,那些(可能)将返回null.您也可以使用"getActivity().getFragmentManager()"来获取FragmentManager. (2认同)

clo*_*ith 37

如果您使用支持片段,您可能实际上想要:

try {
  FragmentManager fragmentManager = ((FragmentActivity) context).getSupportFragmentManager();
} catch (ClassCastException e) {
  Log.e(TAG, "Can't get fragment manager");
}
Run Code Online (Sandbox Code Playgroud)


ojo*_*ifu 7

这对我有用:

Context mContext;
...


//Get FragmentManager
FragmentManager fragmentManager = ((Activity) mContext).getFragmentManager();
Run Code Online (Sandbox Code Playgroud)

(当然你必须首先初始化mContext)