Почему части моего приложения работают с одним контекстом, а не с другим? - PullRequest
0 голосов
/ 03 марта 2019

Хорошо, у меня есть класс 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;
    }
    ...
}

Затем у меня есть Activity с фрагментом, и этот фрагмент содержит RecyclerView и Adapter к нему.Мой адаптер называется HomePacksAdapter, и он прислушивается к контексту, чтобы создать 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 - это объект, который предоставляет основные функции приложения, так что, контекст приложения не предоставляет те вещи, которые нужны моему адаптеру?

1 Ответ

0 голосов
/ 03 марта 2019

getApplicationContext() - Возвращает контекст для всех действий, выполняемых в приложении.Таким образом, вашему домашнему адаптеру нужен только контекст вашей активности для раздувания просмотров, тогда как вы предоставляете контекст всех действий, поэтому он просто не может определить, где раздувать просмотры.

getBaseContext() - Если вы хотите получить доступКонтекст из другого контекста в приложении, к которому вы можете получить доступ.

getContext() - Возвращает контекстное представление только текущей текущей активности, что действительно является причиной, по которой оно работает нормально, когда вы используете getContext (), так как он находит контекстдеятельности, чтобы раздувать взгляды.

Надеюсь, что это помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...