我需要帮助。我正在开发 Android 应用程序。我使用回收 View 。 添加项目后我的布局看起来像。
p.s (Ekle: Add / İçindekiler: ingredients / Tarif Başlığı: Recipe Title)
当我单击“X”按钮时,该项目正在删除,但 recyclerview 高度没有改变。
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/