誰かが助けてくれることを望んでいる 2 つの部分からなる質問があります。基本的に、API からデータを読み取っています。API の結果の 1 つ (アプリ用に作成したカスタム ライブラリ内) は、結果に画像があるかどうかです。
ユーザーがカードを削除して、画像がない場合は表示しない機能を追加しようとしています。これをロード時(選択を保存)またはオンザフライで実行できるようにしたいと思います。
質問1
recyclerview に cardviews を設定するときに、特定のアイテムを明確に除外することはできますか? 画像を非表示にすることはできますが、実際にカードを非表示にするという問題には役立ちません。
質問 2
その場でリサイクラービューから複数のアイテムを削除することは可能ですか? 私が試したのは、すべてのリスト項目を循環する for ループで、画像がない場合は削除します。問題は、これが半分の時間しか機能せず、機能する場合、チェックボックスで 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);
}
}
}