我的Android应用程序中有四个活动。
MainActivity-> ListFilesActivity-> DisplayFileActivity-> EditFileActivity。
我的应用程序已连接到服务器,允许使用该应用程序的最长时间为30分钟(此值可以更改,取决于服务器策略)。
服务器在用户登录后的20( you have 10 min left
)和25( you have 5min left
)分钟内向客户端发送超时剩余。
如果用户在接收时刻处于MainActivity中,则工作正常(我收到消息并显示带有服务器消息的小吃店)。
更多详细信息:
(我有一个Java类Listener,它侦听来自服务器的消息,当接收到消息时,它将调用MainActivity函数并显示小吃栏)
使用这种方式是不正确的,因为我只能调用一个活动来显示小吃栏。
我的问题是如何使用全局零食栏,因此该应用程序将在任何活动中显示零食器,以便用户始终可以看到显示的消息。
是否可以用快餐栏(或者最好使用其他信息显示类型)?
如果没有,您是否知道如何处理?
答案 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();