web-dev-qa-db-ja.com

RecyclerViewは、すべての要素を表示するために完全には拡張されません

EditText、Button、およびRecyclerView(1つのTextViewと1つのImageViewの子で構成される)を作成して、TextViewを追加しました このようになります 。上部のEditTextで、ユーザーはテキストを入力して+ボタンを押すことができます。これにより、RecyclerViewの更新に使用されるList(String)にテキストが追加されます。ユーザーは、右側のxを押して、RecyclerViewからエントリを削除できます。 これがフラグメントレイアウト全体の画像です

画像で確認できる問題は、数回送信した後、RecyclerViewが拡張を停止し、固定サイズのままになることです(右下の小さなブリップに注意してください)。 RecyclerViewをスクロールしてアイテムを表示できます。アイテムは追加されたままですが、フルサイズには拡大されません(画像のアイテムには20以上のアイテムがあります)。アイテムを削除すると、何らかの理由で高さが増加しますが、それでもすべての要素が表示されず、新しいアイテムを追加すると縮小します。

私が試したこと

これがRecyclerViewコードです。階層は行きます

<LinearLayout>
   <ScrollView>
      <LinearLayout>
         <RecyclerView />
      </LinearLayout>
   </ScrollView>
</LinearLayout>

すべての高さと幅は親に一致するように設定され、すべての方向は垂直に設定されます。

<Android.support.v7.widget.RecyclerView
            Android:id="@+id/ingredientsRecyclerView"
            Android:layout_marginTop="4dp"
            Android:layout_marginLeft="4dp"
            Android:layout_marginRight="4dp"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:clipChildren="false"
            Android:clipToPadding="false"
            >

RecyclerView(アダプターの外部)にエントリーを追加するコード:

ingredientsButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (ingredientsText.getText().toString().length() > 0) {
                mIngredients.add(ingredientsText.getText().toString());
                ingredientsText.setText("");
                mAdapter.notifyDataSetChanged();
                mRecyclerView.setBackgroundResource(R.drawable.rounded_edittext);
            }
        }
    });

そして最後に、RecyclerView(RVアダプター内)からエントリーを削除するコード:

cancelImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                        mIngredients.remove(getAdapterPosition());
                mAdapter.notifyItemRemoved(getAdapterPosition());
                mAdapter.notifyItemRangeChanged(getAdapterPosition(), mIngredients.size());
                if(mAdapter.getItemCount() == 0)
                mRecyclerView.setBackgroundResource(0);
            }
        });

私の人生のためにこれを理解することができないので、どんな援助も大いに感謝されるでしょう!

11
user2805004

NestedScrollViewScrollViewおよびsetNestedScrollEnabled(false)の代わりにRecyclerViewを使用します

47
k0sh

k0shは絶対に正しいです。追加するだけで、完全なクラス名を使用します。これはAndroid.support.v4.widget.NestedScrollView(build.gradleファイルにv4サポートライブラリがあることを確認してください)、またはAndroidはNestedScrollViewを見つけられませんクラス。ソース: クラスの拡張エラー-NestedScrollView-クラスが見つかりません

2
gustavoknz