在我的自定义视图中,我有一个运行简单游戏的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
实例,但我不确定它有什么价值。任何帮助将不胜感激。
答案 0 :(得分:7)
如果您的观点附加到Activity
,则只需执行
((Activity)getContext()).getFragmentManager();
或
((ActivityCompat)getContext()).getSupportFragmentManager();
为了更安全,请确保通过执行此操作来检查View Context
Activity
的实例:
if(getContext() instanceof Activity)// do something
更好的解决方案是,我依赖于View
和Activity
之间的回调。
答案 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
安全检查。