【问题标题】:RecyclerView does not fully expand to show all elementsRecyclerView 没有完全展开以显示所有元素
【发布时间】:2016-09-22 01:51:32
【问题描述】:

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

您可以在图像中看到的问题是,在提交几次后,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);
            }
        });

任何帮助都将不胜感激,因为我一生都无法解决这个问题!

【问题讨论】:

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


    【解决方案1】:

    RecyclerView 上使用NestedScrollView 代替ScrollViewsetNestedScrollEnabled(false)

    【讨论】:

    • 闪电般的快速响应,完全正确!感谢朋友的帮助!
    • 这个答案值得赏金!
    【解决方案2】:

    k0sh 是绝对正确的。只需添加,使用完整的类名,即android.support.v4.widget.NestedScrollView(确保您的 build.gradle 文件中有 v4 支持库),否则 Android 将找不到 NestedScrollView 类。来源:Error inflating class - NestedScrollView - class not found

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 2013-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多