Страницы

Поиск по вопросам

вторник, 17 декабря 2019 г.

Как узнать активен ли фрагмент/активити

#java #android #android_fragment #activity #push


В андроид приложении нужно реализовать функциональность чата.
Информация о входящем сообщении приходит через Firebase Push и сохраняется в локальной БД. 

Что хочу: если при приходе push открыта активити (фрагмент чата в MainActivity),
то обновить данные, если открыт другой фрагмент или приложение свернуто - создать и
показать Notification

Основной вопрос: как узнать что в данный момент на экране открыт чат?
Информацию во фрагмент можно отправить sendBroadcast, но как узнать что фрагмент
ее не получил (и в этом случае создать уведомление)?
    


Ответы

Ответ 1



Как вариант в MainActivity сохранять текущий фрагмент. Допустим у вас есть метод для смены фрагментов, получаемый фрагмент держите как переменную активности. public void switchToFragment(Fragment fragment) { getSupportFragmentManager() .beginTransaction() .replace(R.id.frame, fragment) .addToBackStack(null) // что бы не делать стек фрагментов .commitAllowingStateLoss(); currentFragment = fragment; } В данном примере currentFragment и выступает той самой переменной. Далее делайте проверку: if (currentFragment instanceof ChatFragment ) { // ваш код при открытом чате } ChatFrament это название вашего класса фрагмента в котором и реализован чат. Еще видел вот такую реализацию: ChatFrament test = (ChatFrament) getSupportFragmentManager().findFragmentByTag("tag"); if (test != null && test.isVisible()) { // ваш код при открытом чате } В данном примере нужно будет присваивать теги для фрагментов, тогда к ним можно будет обратиться и узнать активен ли он. В таком случае метод для смены фрагментов я бы делал вот так: public void switchToFragment(Fragment fragment, String tag) { getSupportFragmentManager() .beginTransaction() .replace(R.id.frame, fragment, tag) .addToBackStack(null) // что бы не делать стек фрагментов .commitAllowingStateLoss(); }

Комментариев нет:

Отправить комментарий