首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替代安卓5上的getDeclaredField("mBase")

替代安卓5上的getDeclaredField("mBase")
EN

Stack Overflow用户
提问于 2015-07-13 20:21:31
回答 1查看 254关注 0票数 0

在Android4.4及以下版本上,我使用以下代码来setAccessible(true)并获取对话框的上下文:

代码语言:javascript
复制
    private Context getOriginalContextForDialog(Dialog dialog) {
    try {
        if (dialog == null || (dialog != null && dialog.getContext() == null)){
            return null;
        }

        Field field = dialog.getContext().getClass().getDeclaredField("mBase");

        field.setAccessible(true);
        Context value = (Context) field.get(dialog.getContext());
        return value;
    } catch (Exception e) {
        logProc.errSys(LogSubcategory.USER_NOTICE, "Error getting dialog context on UIProcImpl.dismissProgressDialog.", e);
    }

    return null;
}

这会在Android5中返回一个异常,因为找不到"mBase“。我找不出安卓5上的等价物是什么,我添加了"getDeclaredFields“来查看返回了哪些值。附件是从"getDeclaredFields“返回的数组中一些数据的屏幕截图。我在Android4.4的截图中用红色突出显示了"mBase“。另一个截图来自安卓5,它不包括"mBase“。

安卓5中"mBase“的等价物是什么?或者我应该如何更好地编码这个以支持4.4和5?

Android4.4

安卓5

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-13 20:27:15

您可以使用它从对话框中获取基本上下文:

代码语言:javascript
复制
Dialog dialog; // your dialog
Context context = dialog.getContext();
if(context instanceof ContextWrapper)
{
     context = ((ContextWrapper)context).getBaseContext();
}

return context;

编辑:

instanceof操作符用于检查对象是否是类的实例。

示例:

代码语言:javascript
复制
Context context = dialog.getContext();
if(context instanceof ArrayList){ // false because context is not instance of ArrayList
}

Object object = context;
if(object instanceof Context){ // true 

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31392698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档