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

时间:2016-09-22 01:51:33

标签: android xml android-layout android-recyclerview android-linearlayout

我创建了一个EditText,一个Button和一个RecyclerView(由1个TextView和1个ImageView子项组成)来添加TextViews that looks like this。在顶部的EditText中,用户可以输入文本并点击+按钮。这会将其文本添加到List(String)中,该List用于更新RecyclerView。用户可以点击右边的x来从RecyclerView中删除条目。 Here is an image of the overall fragment layout

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

我尝试过的事情

这是RecyclerView代码。 heirarchy去了

<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);
            }
        });

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

3 个答案:

答案 0 :(得分:41)

NestedScrollView上使用ScrollView代替setNestedScrollEnabled(false)RecyclerView

答案 1 :(得分:2)

k0sh is absolutely right. Just to add, use the full class name, which is android.support.v4.widget.NestedScrollView (make sure you have the v4 support library in your build.gradle file), or Android won't find NestedScrollView class. Source: Error inflating class - NestedScrollView - class not found

答案 2 :(得分:0)

在您的 NestedScrollView 集上使用 NestedScrollView 而不是 ScrollView isNestedScrollingEnabled = false