web-dev-qa-db-ja.com

コーディネーターの親と一緒にスクロールリサイクラービューでFABを表示/非表示にする方法

コーディネーターレイアウトのアクティビティがあります。アクティビティ内にリサイクラービューとフロートボタンのフラグメントがあります。スクロールリサイクラービューのときにフロートボタンを表示/非表示にして、ファブ動作の使用を回避するにはどうすればよいですか?!

アクティビティレイアウトの場合:CoordinatorLayout -----> AppBarLayout ---->ツールバーとFrameLayout、および下部バービュー

フラグメントレイアウトの場合:RelativeLayout ---->リサイクラービューとフロートボタン

Google+ホームページのようなものを実装したいです。このシナリオをどのように実装できますか?


一時的に私は自分の問題にこの解決策を使用しました:

フラグメント内のインターフェイスごとにアクティビティのコーディネーターレイアウトを使用し、ファブの動作でファブを表示/非表示にします...より良い解決策が見つかるまで!!!

7
Zahra.HY

このコードは問題なく機能します。

 mRecycler.addOnScrollListener(new RecyclerView.OnScrollListener() {
                @Override
                public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                    if(dy > 0){
                        mFab.hide();
                    } else{
                        mFab.show();
                    }

                    super.onScrolled(recyclerView, dx, dy);
                }
            });

できません:

app:layout_anchor="@id/listView"
app:layout_anchorGravity="bottom|end"

見てください ここ

このGoogleの投稿 に従って、CoordinatorLayoutがListViewと連携するための組み込みのサポートはありません。

Leondroのメソッドを変更して、スクロールがあるとFABが非表示になり、スクロールが停止すると表示されるようにしました。

scrollListener = new RecyclerView.OnScrollListener() {  
    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        switch (newState) {
            case RecyclerView.SCROLL_STATE_IDLE:
                fab.show();
                break;
            default:
                fab.hide();
                break;
        }
        super.onScrollStateChanged(recyclerView, newState);
    }
}; 

rv.clearOnScrollListeners();
rv.addOnScrollListener(scrollListener);
5
Angel Koh