如何在全局侦听器中实现快餐栏?

时间:2015-12-11 22:32:28

标签: android android-activity global snackbar

我在主要活动中使用事件监听器来确定与数据库的网络连接

//Main Activity

    new MyListener() {
        if (connected) {
            Log.d(TAG,"connected");
            Snackbar.make(_current_view_,"Connected to Firebase", Snackbar.LENGTH_SHORT).show();
       }
       else {
            Log.d(TAG,"disconnected");
            Snackbar.make(__current_view_, "Disconnected from Firebase", Snackbar.LENGTH_SHORT).show();
        }       
    });

现在,由于这是主活动中的监听器,因此每次网络连接发生变化时,都会优雅地调用它。但我需要一个观点 当前活动由应用程序呈现。

如何获取当前视图?监听器工作并且日志记录是完美的但是不调用Snackbar,因为我们不在主要活动的布局上。但是,当我们的时候,小吃店会显示出来。 是否有可能获得当前视图的参考?

当我用Toasts替换SnackBars时,它们与日志完美配合。

Toast.makeText(Login.this, "Connected to Firebase", Toast.LENGTH_SHORT).show(); //Works

我试过了:

getCurrentFocus()
findViewbyId(android.R.id.content)
getWindow().getDecorView()
getWindow().getDecorView().getRootView()

没有,其中有效。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

所以在您的评论之后,我理解的是,而不是Firebase中的专家,您应该在onResume中注册您的监听器并在onPause中取消注册。所以你不会在那里发生任何冲突。

但是对于解决方案,您需要以相同的方式注册所有活动。因此,如果您从MainActivity导航到Activity-A,那么在MainActivity的onPause中,取消注册您的侦听器。在Activity-A中,在新Activity的onResume中注册数据库侦听器。因此,您将获得当前活动和当前视图。您的侦听器将在堆栈上调用最新的Activity,而不是始终保持MainActivity的实例。这可能会导致其他问题。

如果上述解决方案对您不利,并且您只需要当前视图,那么每次更改堆栈中的顶级活动时,为什么不保存当前视图。您可以在Application类中拥有一个View Object,您可以在其中静态访问。您可以在Applications类中创建静态getter和setter方法。但我仍然不确定这是否会更好。在应用程序类中保留静态View实例。