RecyclerView没有完全展开以显示所有元素

use*_*004 11 xml android android-layout android-linearlayout android-recyclerview

我创建了一个EditText,一个Button和一个RecyclerView(由1个TextView和1个ImageView子项组成)来添加看起来像这样的 TextViews .在顶部的EditText中,用户可以输入文本并点击+按钮.这会将其文本添加到List(String)中,该List用于更新RecyclerView.用户可以点击右边的x来从RecyclerView中删除条目.这是整个片段布局的图像

您可以在图像中看到的问题是,在几次提交后,RecyclerView会停止扩展并保持固定大小(请注意右下角的小点).您可以在RecyclerView中滚动查看项目,项目仍然会添加到项目中,但它不会扩展到完整大小(图像中的项目有20多个项目).如果我删除一个项目,由于某种原因高度增长但它仍然不会显示所有元素,并且当我添加新项目时它会缩小.

我尝试过的事情

这是RecyclerView代码.heirarchy去了

<LinearLayout>
   <ScrollView>
      <LinearLayout>
         <RecyclerView />
      </LinearLayout>
   </ScrollView>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

所有高度和宽度都设置为匹配父级,所有方向都设置为垂直:

<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"
            >
Run Code Online (Sandbox Code Playgroud)

将条目添加到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);
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

最后,从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);
            }
        });
Run Code Online (Sandbox Code Playgroud)

任何帮助都会非常感激,因为我无法想象我的生活!

k0s*_*0sh 46

使用NestedScrollView替代ScrollViewsetNestedScrollEnabled(false)RecyclerView

  • 这个答案值得赏赐! (2认同)