在自定义视图类中访问FragmentManager

Bri*_*ian 3 java android android-fragments

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

FragmentManager manager = getFragmentManager();
Finish finish = new Finish();
finish.show(manager, "done");
Run Code Online (Sandbox Code Playgroud)

我试过让经理通过一个Fragmentobj:

Fragment fragment = new Fragment();
FragmentManager manager = fragment.getFragmentManager();
Run Code Online (Sandbox Code Playgroud)

但是返回为null.我知道这是一个新Fragment实例,但我不确定给它带来什么价值.任何帮助将非常感激.

小智 8

我使用这个简单的辅助方法:

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


k0s*_*0sh 7

如果您的视图附加到一个Activity然后只是你可以做

((Activity)getContext()).getFragmentManager();
Run Code Online (Sandbox Code Playgroud)

要么

((ActivityCompat)getContext()).getSupportFragmentManager();
Run Code Online (Sandbox Code Playgroud)

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

if(getContext() instanceof Activity)// do something
Run Code Online (Sandbox Code Playgroud)

而更好的解决方案是,我依赖于View和之间的回调Activity.

  • 现在是`((AppCompatActivity)getContext()).getSupportFragmentManager()`. (2认同)