在自定义视图类中访问FragmentManager

时间:2016-04-18 02:28:01

标签: java android android-fragments

在我的自定义视图中,我有一个运行简单游戏的Java类。当游戏结束时,我想显示我的DialogFragment,但getFragmentManager()方法似乎未定义。

FragmentManager manager = getFragmentManager();
Finish finish = new Finish();
finish.show(manager, "done");

我尝试通过Fragment obj获取经理:

Fragment fragment = new Fragment();
FragmentManager manager = fragment.getFragmentManager();

但是返回为null。我知道这是一个新的Fragment实例,但我不确定它有什么价值。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:7)

如果您的观点附加到Activity,则只需执行

即可
((Activity)getContext()).getFragmentManager();

((ActivityCompat)getContext()).getSupportFragmentManager();

为了更安全,请确保通过执行此操作来检查View Context Activity的实例:

if(getContext() instanceof Activity)// do something

更好的解决方案是,我依赖于ViewActivity之间的回调。

答案 1 :(得分:2)

我使用了简单的助手方法:

fun getFragmentManager(context: Context?): FragmentManager? {
    return when (context) {
        is AppCompatActivity -> context.supportFragmentManager
        is ContextThemeWrapper -> getFragmentManager(context.baseContext)
        else -> null
    }
}

答案 2 :(得分:0)

您可以在Kotlin中使用它:

src/main/resources

答案 3 :(得分:0)

对于AndroidX,您可以尝试:

ContextThemeWrapper themeWrapper = (ContextThemeWrapper) getContext();
FragmentManager fm = ((AppCompatActivity) themeWrapper.getBaseContext()).getSupportFragmentManager();

按照@ k0sh的建议,重新建议instaceof安全检查。