-1

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

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

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

4

1 回答 1

0

因此,在您发表评论后,我的理解是,虽然不是 Firebase 的专家,但您可能应该在 onResume 中注册您的听众并在 onPause 中取消注册。所以你不会在那里发生任何冲突。

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

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

于 2015-12-11T23:04:15.013 回答