我有一个由两部分组成的问题,希望有人能提供帮助。本质上,我正在从 API 读取数据。API 的结果之一(在我为应用程序制作的自定义库中)是结果是否有图像。
我正在尝试添加功能,用户可以在其中删除卡片并且如果它们没有图像则不显示它们。我希望能够在加载时(他们存储选择)或在运行时执行此操作。
问题一
在使用卡片视图填充回收站视图时,是否可以专门省略某些项目?我可以使图像保持在外面,但这对实际将卡片留在外面的问题没有帮助。
问题二
是否可以即时从回收站视图中删除多个项目?我尝试过的是循环遍历所有列表项,如果它们没有图像,我会删除它们。问题是这仅在一半时间内有效,并且当它完成时需要单击 4 次并带有一个复选框。
注意:下面的代码在 onCheckedChangedListener 里面
if(imageOnly.isChecked()){
image = true;
for(int i = 0; i < strains.size(); i++){
if(strains.get(i) != null) {
if (strains.get(i).getImage().equalsIgnoreCase(getContext().getResources().getString(R.string.no_image))) {
strains.remove(i);
adapter.notifyItemRemoved(i);
}
}
}
adapter.notifyDataSetChanged();
}else{
image = false;
}
添加适配器
public class StrainCardAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private final List<Strain> strains;
private Context context;
private boolean imageOnly;
public StrainCardAdapter(List<Strain> strains, Context context, boolean imageOnly) {
this.strains = strains;
this.context = context;
this.imageOnly = imageOnly;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.strain_card_view, parent, false);
StrainViewHolder svh = new StrainViewHolder(v);
return svh;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (!strains.get(position).getImage().equals(context.getResources().getString(R.string.no_image))) {
Picasso.with(context).load(strains.get(position).getImage()).into(((StrainViewHolder) holder).strainImage);
}
}
@Override
public int getItemCount() {
return strains.size();
}
public static class StrainViewHolder extends RecyclerView.ViewHolder {
CardView strainCard;
ImageView strainImage;
public StrainViewHolder(View itemView) {
super(itemView);
strainCard = (CardView) itemView.findViewById(R.id.strain_card);
strainImage = (ImageView) itemView.findViewById(R.id.strain_image);
}
}
}