-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 は呼び出されません。すると、スナックバーが表示されます。現在のビューの参照を取得することは可能ですか?

SnackBars を Toasts に置き換えると、ログと完全に連携して動作します。

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 にデータベース リスナーを登録します。したがって、現在のアクティビティと現在のビューを取得します。リスナーは、MainActivity のインスタンスを常に維持するのではなく、スタック上の最新のアクティビティを呼び出します。これは他の問題を引き起こす可能性があります。

上記の解決策が適切でなく、現在のビューのみが必要な場合は、スタックのトップ アクティビティを変更するたびに現在のビューを保存してみませんか。静的にアクセスできる Application クラスに View Object を持つことができます。アプリケーション クラスで静的な getter メソッドと setter メソッドを作成するだけです。しかし、これがより良い方法であるかどうかはまだわかりません。Application クラスに静的な View インスタンスを保持します。

于 2015-12-11T23:04:15.013 に答える