web-dev-qa-db-ja.com

ScrollView内のRecyclerView、一部のアイテムは表示されません

ScrollViewに次のようなRecyclerViewがありました。

_<ScrollView
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <!--other stuff-->

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content">

        <Android.support.v7.widget.RecyclerView
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:visibility="gone"/>

    </LinearLayout>

    <!--other stuff-->

</ScrollView>
_

そしてRecyclerViewのアイテムはRelativeLayoutであり、その中にはEditTextと他のビューがあります。そのRelativeLayoutEditTextの_layout_height_は、両方とも_wrap_content_です。ユーザーは、各アイテムの高さが異なるように、長さ/行の制限なしでそのEditTextに入力できます。

次に、AdaptergetItemCount()が真の値を返しますが、onBindViewHolder()が間違った回数(必要以上に)呼び出されるため、すべての項目を表示するには不十分です。

これは、recyclerView.setNestedScrollingEnabled(false)と書いた場合にのみ発生することがわかりました。しかし、この行を削除することはできません。そうすると、RecyclerViewはスムーズにスクロールせず、ScrollViewおよびScrollView自体の中の他のビューと調和しないためです。

これは6.0では発生しますが、4.1では発生しません。

このページでGoogleとやり取りしました: https://code.google.com/p/Android/issues/detail?id=213914 と彼は、これがRecyclerView。そのページにアクセスして、質問と私の目標をよりよく理解することができます(問題を示す小さなサンプルプロジェクトがあります)。私は今でも彼に同意しないので、問題を解決したいです。助けてください、よろしくお願いします。

16
ywwynm

私は自分で解決策を見つけました:ScrollViewNestedScrollViewに置き換え、recyclerView.setNestedScrollingEnabled(false)を保持します。これがNestedScrollViewの目的であるかどうかはわかりませんが、動作します。

注意:

  1. NestedScrollViewScrollViewの子ではなく、FrameLayoutの子です。
  2. このソリューションは、自己シミュレートadjustResizeを使用したいくつかのバグももたらします。
68
ywwynm