Показывать снек-бар в любой деятельности - PullRequest
3 голосов
/ 03 мая 2020

В моем приложении android есть четыре действия.

MainActivity -> ListFilesActivity -> DisplayFileActivity -> EditFileActivity.

Мое приложение подключено к серверу, максимум время, необходимое для использования приложения, составляет 30 минут (это значение может меняться в зависимости от политики сервера).

Сервер отправляет остаток тайм-аута клиенту в 20 (you have 10 min left ) и через 25 (you have 5min left) минут после входа пользователя.

все работает нормально, если пользователь находится в MainActivity в момент получения (я получаю сообщение и отображаю снэк-бар с сообщение сервера).

Подробнее:

(у меня есть прослушиватель класса java, который прослушивает сообщение с сервера, при получении сообщения вызывает функцию MainActivity и отображает Снэк-бар)

, используя этот способ не правильно, потому что я могу вызвать только одну операцию для отображения Снэк-бар.

Моя проблема заключается в том, как использовать глобальный Снэк-бар, поэтому приложение будет ДИСПЛЕЙ у закусочной в любой деятельности, чтобы пользователь всегда мог видеть отображаемое сообщение.

Возможно ли это сделать с помощью закусочной (или лучше использовать другой тип отображения информации)?

если нет, у вас есть идеи, как с этим справиться?

Ответы [ 5 ]

2 голосов
/ 03 мая 2020

Снэк-бар зависит от вида. Вы можете создать класс BaseActivity и сделать так, чтобы все ваши действия наследовали от него, а затем вы можете отобразить снэкбар из любого действия с помощью метода, подобного следующему:

protected void showSnackbar(View view, String text) {
  if(view != null) {
    Snackbar.make(view, text, Snackbar.LENGTH_SHOW).show(); 
  }
}
1 голос
/ 03 мая 2020

Невозможно отобразить одну и ту же Snackbar для нескольких действий или фрагментов, потому что Snackbar тесно связан с представлением, в котором он инициирован. Поэтому, когда вы покидаете это представление, Snackbar исчезает.

I рекомендовал бы вместо этого использовать сообщение Toast, которое будет отображаться в различных действиях, фрагментах и ​​представлениях и не исчезнет во время процесса навигации.

1 голос
/ 03 мая 2020

Идея состоит в том, чтобы создать глобальный Method, доступный для других четырех классов ... Я не пробовал, поэтому не уверен, но надеюсь, что это сработает:

public void globalSnackbar(String time) {
  View rootView = findViewById(android.R.id.content);
  if(rootView != null) {
    Snackbar.make(rootView, time, Snackbar.LENGTH_SHOW).show(); 
  }
}

, а затем вызовите globalSnackbar в других видах деятельности.

0 голосов
/ 03 мая 2020

Я сделал это таким образом.

я объявил два глобальных статических значения c,

boolean msgFiveMinReceived = false; // default
boolean msgTenMinReceived = false; // default

, когда мой класс Listener получил сообщение от сервера (например, осталось 10 минут) )

msgTenMinReceived = true;

в каждом действии, я запускаю функцию потока, которая проверяет логические значения

    Public void checkMessage() {
            new Thread() {
                public void run() {
                    int i = 0;
                    while (i++ < 100000) {
                        try {
if(msgTenMinReceived ) {
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {

     // display snackbar

    }
        // set msgTen to false                           
    }
                            });
                            Thread.sleep(10000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }.start();
0 голосов
/ 03 мая 2020

Другой вариант - использовать упражнение и четыре фрагмента.

...