为什么我的应用程序部分使用一个上下文而不能与另一个上下文一起使用

问题描述 投票:0回答:1

好的,我有一个类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不提供我的适配器所需的东西?

android android-context
1个回答
2
投票

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

getBaseContext() - 如果要从应用程序中的其他上下文访问Context,则可以访问。

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

希望能帮助到你。

© www.soinside.com 2019 - 2024. All rights reserved.