在使用RecyclerView空间做列表的时候,大多数时候,不要在创建适配器的时候直接把数据传过去,最好设置一个setData的方法进行传值,这样以后在数据变动的时候,直接更新数据就好了,这样页面不会闪烁,位置也依然还在刷新前的位置
package com.enjoyshop.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.apkfuns.logutils.LogUtils;
import com.enjoyshop.EnjoyshopApplication;
import com.enjoyshop.R;
import com.enjoyshop.bean.ShoppingCart;
import com.enjoyshop.fragment.ShopCartFragment;
import com.enjoyshop.utils.GlideUtils;
import com.enjoyshop.widget.NumberAddSubView;
import java.util.List;
/**
* Created by kevin_cyj
* Time 2021/1/21
* Describe: 购物车的适配器
*/
public class ShopCartAdapter extends RecyclerView.Adapter<ShopCartAdapter.ViewHolder> {
private Context mContext;
private List<ShoppingCart> mDatas;
private CheckItemListener mCheckListener;
private ShopCartFragment shopCartFragment;
public ShopCartAdapter(Context mContext, CheckItemListener mCheckListener, ShopCartFragment shopCartFragment) {
this.mContext = mContext;
this.mCheckListener = mCheckListener;
this.shopCartFragment = shopCartFragment;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.template_cart, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
final ShoppingCart cart = mDatas.get(position);
holder.mTvTitle.setText(cart.getGoodsName());
holder.mTvPrice.setText("¥" + cart.getPrice());
holder.mNumberAddSubView.setValue(cart.getCount());
GlideUtils.load(EnjoyshopApplication.sContext, cart.getImgUrl(), holder.mIvLogo);
holder.mNumberAddSubView.setOnButtonClickListener(new NumberAddSubView.OnButtonClickListener() {
@Override
public void onButtonAddClick(View view, int value) {
cart.setCount(value);
shopCartFragment.updateCar(cart);
((ShopCartFragment)mCheckListener).showTotalPrice();
}
@Override
public void onButtonSubClick(View view, int value) {
cart.setCount(value);
shopCartFragment.updateCar(cart);
((ShopCartFragment)mCheckListener).showTotalPrice();
}
});
// 删除按钮操作事件
holder.deletedIconBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
shopCartFragment.deletedCar(cart);
}
});
}
@Override
public int getItemCount() {
return mDatas.size();
}
/**
* 设置列表的值
* @param data
*/
public void setData(List<ShoppingCart> data) {
this.mDatas = data;
}
public class ViewHolder extends RecyclerView.ViewHolder {
private LinearLayout mLlContent;
private TextView mTvTitle;
private TextView mTvPrice;
private CheckBox mCheckBox;
private ImageView mIvLogo;
private NumberAddSubView mNumberAddSubView;
private ImageView deletedIconBtn;
public ViewHolder(View itemView) {
super(itemView);
mLlContent = itemView.findViewById(R.id.ll_item);
mCheckBox = itemView.findViewById(R.id.checkbox);
mIvLogo = itemView.findViewById(R.id.iv_view);
mTvTitle = itemView.findViewById(R.id.text_title);
mTvPrice = itemView.findViewById(R.id.text_price);
mNumberAddSubView = itemView.findViewById(R.id.num_control);
deletedIconBtn = itemView.findViewById(R.id.deleted_icon_btn);
}
}
public interface CheckItemListener {
void itemChecked(ShoppingCart checkBean, boolean isChecked);
}
}
调用时候这样用
mAdapter.setData(dataArray);
mAdapter.notifyDataSetChanged();