如何从createPackageContext()获取ApplicationContext

时间:2016-01-22 02:18:48

标签: android android-context

遵循以下代码:

  

Context c = getContext()。createPackageContext(“com.master.schedule”,   Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);

     

int id = c.getResources()。getIdentifier(“layout_main”,“layout”,“com.master.schedule”);       LayoutInflater inflater = LayoutInflater.from(c);       piflowView = inflater.inflate(id,null);

com.master.schedule是我的包项目。上边的代码显示了另一个项目(他的包名与我的不同)如何给我的项目充气,在我的项目中只有一个ViewGroup(我没有活动) );当我调用“context.getApplicationContext”时,它返回null ...我的项目代码如下:

public class CascadeLayout extends RelativeLayout {
    private Context context;
    public CascadeLayout(Context context) {
        super(context);
        this.context=context.getApplicationContext();
    }
     @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        //here: context == null;
    }
}

我发现createPackageContext()给我的“Context c”是ContextImpl类型;我认为这会导致返回null;

那么如何才能获得一个非空的ApplicationContext?

BTW:请不要说服我不要调用getApplicationContext();因为我必须使用.jar,所以jar需要在其中调用getApplicationContext();

非常感谢。

1 个答案:

答案 0 :(得分:2)

createPackageContext()州的文档:

  

为给定的应用程序名称返回一个新的Context对象。这个   上下文与命名应用程序获取的内容相同   已启动,包含相同的资源和类加载器。

在这些线之间读一点,这个背景显然应该是"相同"作为应用程序上下文。但是,您看到其getApplicationContext()返回null,因此我们可以尝试使用ContextWrapper(见下文)来解决此问题。希望这种方法足以满足您的需求。

在以下代码中,WrappedPackageContext用于包装"包上下文"由createPackageContext()返回,覆盖getApplicationContext()实现,以便它自行返回。

class WrappedPackageContext extends ContextWrapper {
    WrappedPackageContext(Context packageContext) {
        super(packageContext);
    }

    @Override
    public Context getApplicationContext() {
        return this;
    }
}

Context createApplicationContext(Context packageContext) {
    return new WrappedPackageContext(packageContext);
}