web-dev-qa-db-ja.com

CoordinatorLayout、AppBarLayout内のRecyclerViewスクロールの問題

私はこのxmlコードをフラグメントで持っています:

<CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"                              xmlns:app="http://schemas.Android.com/apk/res-auto"                         Android:layout_width="match_parent"                    Android:layout_height="match_parent"                       Android:id="@+id/coordinatorLayout"                      Android:fitsSystemWindows="true">
     <Android.support.design.widget.AppBarLayout
            Android:id="@+id/appBarLayout"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:theme="@style/AppTheme"
            app:elevation="0dp">
     <Android.support.design.widget.CollapsingToolbarLayout
                Android:layout_width="match_parent"
                Android:layout_height="300dp"
                app:layout_scrollFlags="scroll"
                Android:id="@+id/collapsingToolbarLayout"
                app:statusBarScrim="@color/bestColor">
    <LinearLayout></LinearLayout> <!--this elements hide then appbar is collapsed-->
            </Android.support.design.widget.CollapsingToolbarLayout>
    <LinearLayout>
    <ImageButton>
     Android:id="@+id/profile_header_trophies"
    </ImageButton><!-- this elements like a tab,visible if appbar collapsed-->
    </LinearLayout> 
        </Android.support.design.widget.AppBarLayout>

<Android.support.v7.widget.RecyclerView
    Android:id="@+id/profile_recyclerView"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
    </Android.support.design.widget.CoordinatorLayout>

in JavaアイテムセットのクラスClickListener:

@OnClick(R.id.profile_header_trophies)
    public void profile_header_trophies_clicked() {
        if (myProfile != null) {
            appBarLayout.setExpanded(false, false);
            if (myProfile.getBests().size() == 0) {
                profile_recyclerView.smoothScrollToPosition(3);
            } else {
                profile_recyclerView.smoothScrollToPosition(2 + 20);
                }
            }

ImageButtonをクリックすると、RecyclerViewが所定の位置にスクロールし、すべてが正常に表示されます。しかし、上に表示(スティッキー)しているAppBarLayoutセクション(ImageButton)に指を置き、下にドラッグすると、スクロールが悪くなります。リサイクラーの上部にいくつかの要素があります(スクロールすると非表示になります)。

enter image description here

この問題は行動を起こしていると思います。リサイクラーを最初にスクロールした場合、AppBarは展開を開始しませんが、リサイクラーは要素のリッチトップではありません。

あなたの答えをありがとう。

12
TazmanOne

これにより、RecyclerViewのスクロールをその親のスクロールと「マージ」するように指示します。

app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

私がよく理解しているなら、あなたは以下のスクロール動作をしたいと思うでしょう:

  • recyclerViewの外側をタッチしてスクロールしている場合は、AppBarが折り​​たたまれます。
  • 内部をタッチしてスクロールしている場合は、RecyclerViewのスクロールを無視してAppBarを折りたたみます。AppBarを折りたたむと、RecyclerView内でスクロールします。

これが望ましい動作であることを確認できますか?

そのような場合、あなたは この答え を見るかもしれません、多分それは助けるでしょう

4
AdricoM

スクロール不良が発生したのは、別のRecyclerView内でRecyclerViewを使用していたためです。

そのため、メインのRecyclerViewでコンテンツをスクロールしようとすると、この問題が発生しました。

その問題を解決するために、これをRecyclerViewに追加しました。

recyclerView.setNestedScrollingEnabled(false);

XMLでこれを行うには、次を使用できます。

Android:nestedScrollingEnabled="false"
2
Amit Upadhyay

ViewPager内でRecyclerViewを使用している場合は、次の行をViewPagerに追加します。Android:nestedScrollingEnabled="false"

それはあなたの問題を解決します。

0
Rohail Ahmad

NestedScrollViewでコンテンツをラップし、NestedScrollViewでapp:layout_behavior="@string/appbar_scrolling_view_behavior"を設定する必要があると思います

0
Paparazi NDH