0

誰かが助けてくれることを望んでいる 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);
        }
    }

}
4

1 に答える 1