Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在全局侦听器中实现snackbar?_Android_Android Activity_Global_Snackbar - Fatal编程技术网

Android 如何在全局侦听器中实现snackbar?

Android 如何在全局侦听器中实现snackbar?,android,android-activity,global,snackbar,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 {

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

//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没有被调用,因为我们不在主要活动的布局上。但是,当我们打开时,会显示snackbar。 是否可以获取当前视图的参考

当我用烤面包代替小吃条时,它们与原木完美地结合在一起

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

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

没有,但都有效。任何帮助都将不胜感激。

因此,在您发表评论之后,我的理解是,虽然不是Firebase的专家,但您可能应该在onResume中注册您的侦听器,并在onPause中注销它。这样你就不会有任何冲突了

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


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

能否提供有关您的体系结构的更多信息?MainActivity是碎片的宿主吗?关于当前视图,你是什么意思?若活动不在前台,你们如何让MyListener的方法发挥作用?这一点很好。监听器是firebase数据库监听器,一旦注册,它将一直保持到显式删除为止。它可以无缝地跨活动工作。我用烤面包的时候,效果很好。这只是主要的活动,没有任何片段的宿主。我希望我能解释一下,但是注册和注销网络侦听器这么多次都是低效的,因为SnackBar的功能可以被Toast所取代。当然,还有其他选择。但我想用一种更好的方式。请参阅我编辑的答案。