通过片段获取父活动

Posted

技术标签:

【中文标题】通过片段获取父活动【英文标题】:get parent activity by a fragment 【发布时间】:2022-01-10 18:43:48 【问题描述】:

我目前有两个活动,MainActivity 和 ResultActivity,它们都将使用相同的片段 - 收藏夹。 我的问题是: 如何知道哪个活动包含片段?比如我在Activity ResultActivity中有一个fragment A,如何知道fragment A是包含在ResultActivity还是MainActivity中?

【问题讨论】:

【参考方案1】:

您可以检查此活动的实例。

getActivity() - 可以返回 null 值,所以你需要检查这个。

Java

        if (getActivity() != null && getActivity() instanceof MainActivity) 
//          TODO
         else if (getActivity() !=null && getActivity() instanceof ResultActivity) 
//            TODO
        

科特林

        if (activity !=null && activity is MainActivity) 
//          TODO
         else if (activity !=null && activity is ResultActivity) 
//            TODO
        

Edited:你也可以使用其他方法requireActivity 不同的是你会收到notNull 值,但是如果activity null 你可以得到IllegalStateException .

requireActivity() - 返回 notNull 值但可以抛出异常。

      try 
        if (requireActivity() instanceof MainActivity) 
            //          TODO
         else if (requireActivity) instanceof ResultActivity) 
            //            TODO
        
    catch (Exception e)

科特林

        try 
        if (requireActivity() is MainActivity) 
            //          TODO
         else if (requireActivity) is ResultActivity) 
            //            TODO
        
    catch (Exception e)

【讨论】:

非常感谢!!!【参考方案2】:

我认为这是最适合你的做法。

要获得 Activity,您应该使用 requireActivity()

要获取上下文,您应该使用 requireContext()

// for kotlin
fun isMainActivity(): Boolean 
    return requireActivity() is MainActivity


public boolean isMainActivity() 
    return requireActivity() instanceof MainActivity;

【讨论】:

谢谢你的回答,请问requireActivity()和getActivity()的区别?我找不到合适的答案 ***.com/a/61045701/5429327 这个答案也是正确的,唯一的区别是当您尝试检查 Null 值时,错误将出现在方法 requireActivity 或您的实现中)但我已经更新了答案。

以上是关于通过片段获取父活动的主要内容,如果未能解决你的问题,请参考以下文章

通过 id 从片段获取编辑文本到其托管活动

无法通过接口获取与片段通信的活动

如何从 Support V4 Fragment 获取父活动?

无法移动到嵌套子导航组件中的父片段?

通过活动父菜单项获取正文类

从片段中调用父母的活动