web-dev-qa-db-ja.com

ネストされたscrollview + recyclerview、奇妙な自動スクロール動作

ビューページャーには、いくつかのフラグメントがあり、そのうちの1つは、ヘッダーとrecyclerviewを持つネストされたスクロールビューを使用します。

<Android.support.v4.widget.NestedScrollView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/scrollview"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fillViewport="true"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.m360.Android.fragment.Members.MemberDetailsFragment">

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:orientation="vertical"
        Android:paddingTop="20dp">

        <header/>

        <Android.support.v7.widget.RecyclerView
            Android:id="@+id/recycler"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:clipToPadding="false"
            Android:paddingTop="0dp" />

    </LinearLayout>

</Android.support.v4.widget.NestedScrollView>

タグ「header」は複雑なレイアウトを表しており、コードを大幅に拡張するため、ここには投稿したくありませんでした。

タブを切り替えると、ストレートにリサイクラビューにスクロールします。ヘッダーは非表示です。表示するには上にスクロールする必要があります。

何が原因かについてのアイデアはありますか?回避できる場合は、アダプターで型を使用したくありません。

30
Renaud Favier

同様の問題があります。垂直RecyclerViewがあります。この垂直RecyclerViewの各アイテムには、Android TVアプリのように、水平RecyclerViewが含まれます。

サポートライブラリを23.4.0から24.0.0にアップグレードすると、自動スクロールが突然表示されました。特に、Activityを開いてから戻ると、垂直のRecyclerViewが上にスクロールして、現在の水平のRecyclerView行が切り取られず、行が表示されます。完全に。

_Android:descendantFocusability="blocksDescendants"_を追加すると、問題が修正されます。

しかし、私は 別のソリューション を見つけました。これも機能します。この場合、垂直のRecyclerViewFrameLayoutの中に含まれています。 _Android:focusableInTouchMode="true"_をこのFrameLayoutに追加すると、問題はなくなります。

ここで言及した3番目のソリューション もあります。これは基本的に、子/内部RecyclerViewsでsetFocusable(false)を呼び出すことで構成されます。私はこれを試していません。

ところで、 AOSPの未解決の問題 があります。

20

セットするAndroid:focusableInTouchMode="true"は、LinearLayoutの子レイアウト(NestedScrollViewの場合があります)

3
Balu Sangem