7

レイアウトを実装する recyclerview がありswipetorefreshます。リストを指で下にスワイプすると、新しい投稿が読み込まれます。またonloadmorelistener、私の recyclerview をページネーションする機能もあります。recyclerview を指で上にスワイプすると、古い投稿が読み込まれます。

snackbarユーザーがオフラインで、古い投稿や新しい投稿の読み込みなど、ある種のネットワーク アクティビティを完了しようとすると、「インターネットがありません」という通知を表示する通知を作成しようとしています。

インターネットがなく、ユーザーがリサイクラー ビューを上にスワイプしてから下にスワイプすると、同じ「インターネットがありません」というメッセージを表示する 2 つのスナックバー通知が表示されます。実際には、代わりに表示したいだけです。

したがって、スナックバーに表示されるテキストを識別するための独自の方法を探しています。テキストが両方のスナックバーで同じ場合、1 つのスナックバーのみが表示されますが、getText()スナックバーにはメソッドがなく、http のみsetText()表示されます。 ://developer.android.com/intl/es/reference/android/support/design/widget/Snackbar.html

また、コールバック メソッドがあることもわかります: http://developer.android.com/intl/es/reference/android/support/design/widget/Snackbar.Callback.htmlしかし、どれも私のシナリオでは役に立たないようです。

識別目的で作成されたときにスナックバーに与えることができた一意のフラグがあればいいのにと思いますが、このSnackbar.make方法では許可されていません。

これに似た問題の解決に成功した人はいますか?

4

2 に答える 2

11

スナックバー コールバックを使用します。表示されたら、たとえばリストに追加し、コールバックが呼び出されたら削除して、スナックバーだけが表示されるようにします。コールバックの例:

snackbar.setCallback(new Snackbar.Callback() {

    @Override
    public void onDismissed(Snackbar snackbar, int event) {
      //see Snackbar.Callback docs for event details
      ...  
    }

    @Override
    public void onShown(Snackbar snackbar) {
       ...
    }
  });
于 2015-12-31T13:28:36.297 に答える
5

ヘルミが言ったことをコードに落とし込んでみる

private Map<String, String> snackbarList = new HashMap<>();
private CoordinatorLayout mCoordinatorLayout;

private void displaySnackbarIfNotShown(String snackbarText) {
    //Check if the snackbar is already on the list
    if(snackbarList.containsKey(snackbarText)){
        //Snackbar already exist, you may update its text or ignore it
    } else {
        Snackbar mySnackbar = Snackbar.make(mCoordinatorLayout, R.string.prompt_adjust_map,
                                            Snackbar.LENGTH_INDEFINITE);

        mySnackbar.setCallback(new Snackbar.Callback() {
            @Override
            public void onDismissed(Snackbar snackbar, int event) {
                //Remove from the snackbar list
                snackbarList.remove(snackbarText);
            }

            @Override
            public void onShown(Snackbar snackbar) {
                //Add to the snackbar list
                snackbarList.put(snackbarText, "");
            }
        });
        mySnackbar.show(); 
    }
}
于 2016-09-21T14:41:32.487 に答える