好的,我有一个类LibApp
,它是扩展的Application类和存储上下文:
public class LibApp extends Application {
private static LibApp instance;
private static Context context;
private AppModule appModule;
private AppComponent appComponent;
@Override
public void onCreate() {
super.onCreate();
...
instance = this;
context = getApplicationContext();
...
}
public static LibApp getInstance() {
return instance;
}
public static Context getContext() {
return context;
}
...
}
然后我有Activity with Fragment,这个Fragment包含RecyclerView和Adapter。我的适配器叫HomePacksAdapter
,他注意Context创建ImageView。所以,如果我写:
HomePacksAdapter adapter = new HomePacksAdapter(getContext());
一切正常。但如果我写:
HomePacksAdapter adapter = new HomePacksAdapter(LibApp.getContext());
我很沮丧:
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
我不认为我理解上下文是什么,因为我无法解释为什么一个上下文“更好”另一个上下文。在我的定义中,Context是提供应用程序基本功能的对象,那么什么,应用程序Context不提供我的适配器所需的东西?
getApplicationContext()
- 返回在应用程序中运行的所有活动的上下文。因此,您的家庭适配器只需要您的活动的上下文来膨胀视图,而您提供所有活动的上下文,因此它无法确定在哪里扩充视图。
getBaseContext()
- 如果要从应用程序中的其他上下文访问Context,则可以访问。
getContext()
- 返回当前正在运行的活动的上下文视图,这确实是它在使用getContext()时正常工作的原因,因为它找到了膨胀视图的活动上下文。
希望能帮助到你。