我在主要活动中使用事件监听器来确定与数据库的网络连接
//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()
没有,其中有效。任何帮助将不胜感激。
答案 0 :(得分:0)
所以在您的评论之后,我理解的是,而不是Firebase中的专家,您应该在onResume中注册您的监听器并在onPause中取消注册。所以你不会在那里发生任何冲突。
但是对于解决方案,您需要以相同的方式注册所有活动。因此,如果您从MainActivity导航到Activity-A,那么在MainActivity的onPause中,取消注册您的侦听器。在Activity-A中,在新Activity的onResume中注册数据库侦听器。因此,您将获得当前活动和当前视图。您的侦听器将在堆栈上调用最新的Activity,而不是始终保持MainActivity的实例。这可能会导致其他问题。
如果上述解决方案对您不利,并且您只需要当前视图,那么每次更改堆栈中的顶级活动时,为什么不保存当前视图。您可以在Application类中拥有一个View Object,您可以在其中静态访问。您可以在Applications类中创建静态getter和setter方法。但我仍然不确定这是否会更好。在应用程序类中保留静态View实例。