首页 > 解决方案 > 在recyclerview中隐藏项目时如何填充空白

问题描述

我的活动中有一个recyclerview,在每个项目中我都有两个按钮和一个订单号,当减号底部使订单号为零时,我想隐藏这个项目,其他项目出现并填充空白空间。我用 setVisibility 隐藏项目( ) 但我不知道如何处理空格。

这是我的 recyclerview 适配器:

package com.test.mohammaddvi.snappfood.Adapter;
public class RecyclerViewBuyBasketAdapter extends RecyclerView.Adapter<RecyclerViewBuyBasketAdapter.SingleItemBuyBasket> {

private ArrayList<FinalFood> foodList;
private Context mContext;
private View view;

public RecyclerViewBuyBasketAdapter(ArrayList<FinalFood> foodList, Context mContext) {
    this.foodList = foodList;
    this.mContext = mContext;
}

@NonNull
@Override
public RecyclerViewBuyBasketAdapter.SingleItemBuyBasket onCreateViewHolder(ViewGroup parent, int viewType) {
    view = LayoutInflater.from(parent.getContext()).inflate(R.layout.buybasketitem, null);
    return new RecyclerViewBuyBasketAdapter.SingleItemBuyBasket(view);
}

@Override
public void onBindViewHolder(final RecyclerViewBuyBasketAdapter.SingleItemBuyBasket holder, int position) {

    FinalFood food = foodList.get(position);
    holder.foodName.setText(food.getName());
    holder.foodDetails.setText(food.getDetails());
    holder.foodPrice.setText(food.getPrice());
    holder.foodOrderNumber.setText(food.getOrdernumber() + "");
    handleClick(holder, view);
}

private void handleClick(final RecyclerViewBuyBasketAdapter.SingleItemBuyBasket holder, final View view) {
    holder.foodPlusButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FinalFood food = foodList.get(holder.getAdapterPosition());
            int orderNumber = food.getOrdernumber();
            int newOrderNumber = orderNumber + 1;
            food.setOrdernumber(newOrderNumber);
            holder.foodOrderNumber.setText(newOrderNumber + "");
        }
    });
    holder.foodMinusButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FinalFood food = foodList.get(holder.getAdapterPosition());
            int orderNumber = food.getOrdernumber();
            if (orderNumber == 1) {
                int newOrderNumber = orderNumber - 1;
                food.setOrdernumber(newOrderNumber);
                view.setVisibility(View.GONE);
            } else {
                int newOrderNumber = orderNumber - 1;
                food.setOrdernumber(newOrderNumber);
                holder.foodOrderNumber.setText(newOrderNumber + "");
            }

        }
    });
}


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


public class SingleItemBuyBasket extends RecyclerView.ViewHolder {

    TextView foodName;
    TextView foodPrice;
    Button foodPlusButton;
    Button foodMinusButton;
    TextView foodOrderNumber;
    TextView foodDetails;

    SingleItemBuyBasket(View itemView) {

        super(itemView);
        this.foodName = itemView.findViewById(R.id.foodNameInBuyBasket);
        this.foodPrice = itemView.findViewById(R.id.foodPriceInBuyBasket);
        this.foodDetails = itemView.findViewById(R.id.foodDetailsInBuyBasket);
        this.foodPlusButton = itemView.findViewById(R.id.plusbuttonInBuyBasket);
        this.foodMinusButton = itemView.findViewById(R.id.minusbuttonInBuyBasket);
        this.foodOrderNumber = itemView.findViewById(R.id.ordernumberInBuyBasket);
    }
}
}

这是我的活动:

package com.test.mohammaddvi.snappfood;
public class BuyBasket extends AppCompatActivity{
ArrayList<FinalFood> foods = new ArrayList<>();
RecyclerViewBuyBasketAdapter recyclerViewBuyBasketAdapter;
RecyclerView recyclerView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_buy_basket);
    recyclerView = findViewById(R.id.recyclerview);
    foods= (ArrayList<FinalFood>) getIntent().getSerializableExtra("final");
    recyclerViewBuyBasketAdapter = new RecyclerViewBuyBasketAdapter(foods, BuyBasket.this);
    recyclerView.setLayoutManager(new LinearLayoutManager(BuyBasket.this, LinearLayoutManager.VERTICAL, false));
    recyclerView.setHasFixedSize(true);
    recyclerView.setAdapter(recyclerViewBuyBasketAdapter);
}
}

标签: androidandroid-recyclerview

解决方案


最好删除整行而不是更改可见性。这是删除行的代码。您需要调用 removeItem(position); 按钮 onclickListener 中的方法

  public void removeItem(int position)
  {
    // Remove specified position
    models.remove(position);
    // Notify adapter to remove the position
    notifyItemRemoved(position);
    // Notify adapter about data changed
    notifyItemChanged(position);
    // Notify adapter about item range changed
    notifyItemRangeChanged(position, arraylist.size());
  }

推荐阅读