在任何活动中显示小吃店

时间:2020-05-03 17:02:47

标签: android android-snackbar

我的Android应用程序中有四个活动。

MainActivity-> ListFilesActivity-> DisplayFileActivity-> EditFileActivity。

我的应用程序已连接到服务器,允许使用该应用程序的最长时间为30分钟(此值可以更改,取决于服务器策略)。

服务器在用户登录后的20( you have 10 min left )和25( you have 5min left )分钟内向客户端发送超时剩余。

如果用户在接收时刻处于MainActivity中,则工作正常(我收到消息并显示带有服务器消息的小吃店)。

更多详细信息:

(我有一个Java类Listener,它侦听来自服务器的消息,当接收到消息时,它将调用MainActivity函数并显示小吃栏)

使用这种方式是不正确的,因为我只能调用一个活动来显示小吃栏。

我的问题是如何使用全局零食栏,因此该应用程序将在任何活动中显示零食器,以便用户始终可以看到显示的消息。

是否可以用快餐栏(或者最好使用其他信息显示类型)?

如果没有,您是否知道如何处理?

5 个答案:

答案 0 :(得分:2)

小吃栏取决于视图。您可以创建一个BaseActivity类,并使所有活动都继承自该类,然后可以使用以下方法显示任何活动的小吃栏:

protected void showSnackbar(View view, String text) {
  if(view != null) {
    Snackbar.make(view, text, Snackbar.LENGTH_SHOW).show(); 
  }
}

答案 1 :(得分:1)

这个想法是要创建一个可供其他四个类访问的全局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

答案 2 :(得分:1)

不可能在多个活动或片段中显示相同的Snackbar,因为Snackbar与启动该视图的视图紧密相关。因此,无论何时离开该视图,Snackbar都会消失。

我建议改用Toast消息,该消息将显示在不同的活动,片段和视图上,并且在导航过程中不会消失。

答案 3 :(得分:0)

另一个选择是使用一个活动和四个片段。

答案 4 :(得分:0)

我是这样做的。

我声明了两个全局静态布尔值,

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

当我的Listener类收到服务器消息时(例如,还剩10分钟)

msgTenMinReceived = true;

在每个Activity中,我运行一个检查布尔值的线程函数

    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();