首页 > 解决方案 > 为什么我的应用程序的某些部分在一个上下文中工作而在另一个上下文中不工作?

问题描述

好的,我有一个类LibApp,它是扩展的应用程序类并存储上下文:

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;
    }
    ...
}

然后我有带有 Fragment 的 Activity,这个 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

我不认为我理解上下文是什么,因为我无法解释为什么一个上下文比另一个上下文“更好”。在我的定义中,上下文是提供应用程序基本功能的对象,那么,应用程序上下文不提供我的适配器需要的那些东西呢?

标签: androidandroid-context

解决方案


getApplicationContext()- 返回应用程序中运行的所有活动的上下文。所以你的家庭适配器只需要你的活动的上下文来膨胀视图,而你正在提供所有活动的上下文,所以它根本无法确定在哪里膨胀视图。

getBaseContext()- 如果您想从应用程序中的另一个上下文访问上下文,您可以访问。

getContext()- 仅返回当前正在运行的活动的上下文视图,这确实是当您使用 getContext() 时它可以正常工作的原因,因为它会找到活动的上下文来膨胀视图。

希望能帮助到你。


推荐阅读