java - 删除项目后 Recyclerview 高度没有改变

标签 java android android-recyclerview

我需要帮助。我正在开发 Android 应用程序。我使用回收 View 。 添加项目后我的布局看起来像。

p.s (Ekle: Add / İçindekiler: ingredients / Tarif Başlığı: Recipe Title)

After adding items 当我单击“X”按钮时,该项目正在删除,但 recyclerview 高度没有改变。

enter image description here enter image description here

How can I handle it? Thanks in advance

适配器:

public class IngredientsAddAdapter extends RecyclerView.Adapter<IngredientsAddAdapter.IngredientsVH> {

    List<String> dataList;
    Context context;
    OnItemClickListener clickListener;

    public IngredientsAddAdapter(Context context, List<String> dataList) {
        this.context = context;
        this.dataList = dataList;
    }

    @Override
    public IngredientsVH onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.ingredients_add_list_item, viewGroup, false);
        return new IngredientsVH(view);
    }

    @Override
    public void onBindViewHolder(IngredientsVH ingredientsVH, int i) {
        ingredientsVH.title.setText(dataList.get(i));

    }

    @Override
    public int getItemCount() {
        return dataList == null ? 0 : dataList.size();
    }

    class IngredientsVH extends RecyclerView.ViewHolder implements View.OnClickListener {
        TextView title;
        ImageButton deleteIng;

        public IngredientsVH(View itemView) {
            super(itemView);
            title = (TextView) itemView.findViewById(R.id.ingredientItem);
            deleteIng = (ImageButton) itemView.findViewById(R.id.deleteIng);
            deleteIng.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            clickListener.onItemClick(v, getAdapterPosition());
            dataList.remove(getAdapterPosition());
            notifyItemRemoved(getAdapterPosition());
            notifyItemRangeChanged(getAdapterPosition(), dataList.size());
        }

    }

    public interface OnItemClickListener {
        public void onItemClick(View view, int position);
    }

    public void SetOnItemClickListener(final OnItemClickListener itemClickListener) {
        this.clickListener = itemClickListener;
    }

}

Activity :

ingList = (RecyclerView) findViewById(R.id.ingList);
ingList.setNestedScrollingEnabled(false);
ingList.setLayoutManager(new LinearLayoutManager(recipeAdd.this));
ingList.setItemAnimator(new DefaultItemAnimator());
ingList.setHasFixedSize(true);
if (ingredientsAddAdapter == null) {
    ingredientsAddAdapter = new IngredientsAddAdapter(recipeAdd.this, ingredientsAddArray);
    ingList.setAdapter(ingredientsAddAdapter);
    ingredientsAddAdapter.SetOnItemClickListener(new IngredientsAddAdapter.OnItemClickListener() {
        @Override
        public void onItemClick(View view, int position) {
        }
    });
}

recipe_add.xml(这些代码仅用于测试目的。:D)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_height="match_parent"
    android:background="@color/colorBg"
    android:padding="5dp">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true">


        <android.support.v7.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_marginBottom="10dp">

            <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:ems="10"
                    android:id="@+id/recipeTitle"
                    android:inputType="text"
                    android:hint="Tarif Başlığı"
                    style="@style/Widget.AppCompat.Light.AutoCompleteTextView"
                    android:fontFamily="sans-serif"
                    android:textSize="14sp"
                    android:textStyle="normal|bold"
                    android:layout_margin="5dp"
                    android:background="@drawable/border"
                    android:padding="10dp" />

            </LinearLayout>
        </android.support.v7.widget.CardView>

        <android.support.v7.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <Button
                    android:text="Ekle"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:layout_alignParentRight="true"
                    android:layout_alignParentEnd="true"
                    android:id="@+id/ingAdd"
                    android:onClick="addIng" />

                <TextView
                    android:text="İçindekiler"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/textView4"
                    android:textStyle="normal|bold"
                    android:textSize="14sp"
                    android:padding="10dp"
                    android:layout_centerVertical="true"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentStart="true" />
            </RelativeLayout>

        </android.support.v7.widget.CardView>

        <android.support.v7.widget.CardView
            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:id="@+id/ingList" />
        </android.support.v7.widget.CardView>

    </LinearLayout>

</RelativeLayout>

ingredients_add_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="@drawable/border_top"
    android:orientation="horizontal">

    <ImageButton
        android:layout_width="30dp"
        android:layout_height="match_parent"
        android:src="@drawable/crop__ic_cancel"
        android:id="@+id/deleteIng"
        android:background="@android:color/transparent" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/ingredientItem"
        android:text="Hello world"
        android:textSize="16dp"
        android:textColor="@color/colorDark"
        android:textStyle="bold"
        android:padding="8dp" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/isClick"
        android:text="false"
        android:textSize="16dp"
        android:visibility="gone"/>
</LinearLayout>

最佳答案

我遇到了完全相同的问题,对我有用的是

recyclerView.setHasFixedSize(false);

setHasFixedSize 告诉 RecyclerView 它的大小是否取决于适配器内容。将它设置为 false 是非常昂贵的,因为 RecyclerView 中会频繁插入和删除。但就我而言,这是必要的。

关于java - 删除项目后 Recyclerview 高度没有改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40962689/

相关文章:

android - 放大 RecyclerView 中的项目以重叠 2 个相邻的项目 Android

android - 无法解析目标 'android-19'

Android Sqlite 应用程序在 Android pie 及更高版本中崩溃给出 SQLiteDiskIOException(代码 522)

android - ListFragment addFooterView

java - Android Studio 和 Firebase : CardView Loading Problem

java - 如何修复反编译 .class 为 .java 错误

java - 返回多个数组的方法

java - 多次构造同一对象的良好风格

java - Apache Camel : Control over route startup

android - Recyclerview 滑动 + CardView 触摸