来自上下文的FragmentManager

我创build了一个新的View类。 在那个类中,我需要访问FragmentManager ,但我不知道如何。

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

 CustomView extends LinearLayout 

Solutions Collecting From Web of "来自上下文的FragmentManager"

只有给定的Context扩展了Activity(Post-Honeycomb)或FragmentActivity(pre-honeycomb)。

在这种情况下,你必须100%确定这是一个使用reflection或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"); } 

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

如果您正在使用支持碎片,您可能实际上需要:

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

这对我来说是有效的:

 Context mContext; ... //Get FragmentManager FragmentManager fragmentManager = ((Activity) mContext).getFragmentManager(); 

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

您可以访问应用程序中的FragmentManager(或SupportFragmentManager),但正如其他答案所build议的,您只能通过一个Activity实例来完成此操作。

但是,您可以通过Activity访问FragmentManager,而无需使用ActivityLifecycleCallbacks接口直接调用任何活动:

 registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks { @Override public void onActivityCreated(Activity activity, Bundle bundle) { activity.getFragmentManager() if(activity instanceof FragmentActivity) { ((FragmentActivity)activity).getSupportFragmentManager(); } unregisterActivityLifecycleCallbacks(this); } ...