【问题标题】:Recyclerview height is not changing after removing item删除项目后Recyclerview高度没有改变
【发布时间】:2016-12-04 19:27:32
【问题描述】:

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

p.s(Ekle:添加/İçindekiler:成分/Tarif Başlığı:配方标题)

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

我该如何处理? 提前致谢

适配器:

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

}

活动:

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>

【问题讨论】:

  • 你能发布用于项目和适配器的代码吗?
  • 当然!我需要几秒钟
  • 你能发布你的布局 xml 吗?
  • ingList.swapAdapter(ingredientsAddAdapter,true);这是工作!

标签: java android android-recyclerview


【解决方案1】:

我面临着完全相同的问题,对我有用的是

recyclerView.setHasFixedSize(false);

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

【讨论】:

    【解决方案2】:

    我找到了解决方案。 :D swapAdapter 是答案(感谢 IDE)

    ingList.swapAdapter(ingredientsAddAdapter,true);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 2018-03-29
      • 2015-01-27
      • 2017-07-25
      • 2019-06-21
      相关资源
      最近更新 更多