遵循以下代码:
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()
;
答案 0 :(得分:2)
为给定的应用程序名称返回一个新的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);
}