如何从Android Support V4 Fragment中获取宿主AppCompatActivity?
Support包Fragment获取宿主AppCompatActivity方案
Android.Support.V4.App.Fragment 中获取的 Activity 属性返回 FragmentActivity 实例,而 AppCompatActivity 本身就是 FragmentActivity 的子类,只需做安全的类型转换即可获得宿主AppCompatActivity实例。
Kotlin 实现代码
// 安全转换写法,转换失败或Activity未挂载时返回null val hostActivity = activity as? AppCompatActivity hostActivity?.let { // 此处可正常调用AppCompatActivity的所有公开方法 } // 确认Fragment已挂载到宿主时的简化写法,未挂载会抛出异常 val hostActivity = requireActivity() as AppCompatActivity
Java 实现代码
// 先做类型校验和非空校验,避免崩溃 if (getActivity() instanceof AppCompatActivity) { AppCompatActivity hostActivity = (AppCompatActivity) getActivity(); // 执行宿主相关操作 }
注意事项
- 不要在
onCreate()、onCreateView()这类Fragment未完成挂载的生命周期阶段调用上述逻辑,建议在onViewCreated()及之后的生命周期执行相关操作 - 如果需要长期和宿主做数据交互,更推荐通过定义公共接口的方式实现解耦,避免Fragment和特定Activity强绑定
内容的提问来源于stack exchange,提问作者Ryan D.
相关产品推荐
相关产品推荐

