守则如下:
上下文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是我的包project.The上的代码,它显示了另一个项目(他的包名与我的不同)如何膨胀我的项目,在我的项目中只有一个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呢?
顺便说一句:请不要说服我不要调用getApplicationContext();,因为我必须使用.jar,jar需要在其中调用getApplicationContext();
非常感谢。
发布于 2016-01-22 03:26:23
createPackageContext()的文档声明:
返回给定应用程序名称的新上下文对象。此上下文与命名应用程序启动时得到的内容相同,其中包含相同的资源和类加载器。
在字里行间阅读一点,这个上下文显然应该与应用程序上下文“相同”。但是,您可以看到它的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);
}https://stackoverflow.com/questions/34937912
复制相似问题