ホーム>source

そこで、アイテムに画像を追加したいと思います。現在、RecyclerViewで各CardViewの単語を表示できます。しかし、写真の場合、私はそうすることができません。 listImage<>を追加してみました  ImageView/Drawableのデータ型を使用しますが、まだ動作しません(ただし、listData<> ただし、データ型は文字列です)。 私のRecyclerAdapterのコードは次のとおりです。

class RecyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener{
public TextView txtDesc;
public ImageView imgView;
private ItemClickListener itemClickListener;
public RecyclerViewHolder(@NonNull View itemView) {
    super(itemView);
    txtDesc = (TextView)itemView.findViewById(R.id.foodcourtdesc);
    imgView = (ImageView)itemView.findViewById(R.id.foodcourtimg);
    itemView.setOnClickListener(this);
    itemView.setOnLongClickListener(this);
    }
}
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerViewHolder>{
private List<String> listData = new ArrayList<>();
private Context context;
public RecyclerAdapter(List<String> listData, Context context) {
    this.listData = listData;
    this.context = context;
}
@Override
public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    View itemView = inflater.inflate(R.layout.foodcourt, parent, false);
    return new RecyclerViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull RecyclerViewHolder holder, int position) {
    holder.txtDesc.setText(listData.get(position));
    holder.setItemClickListener(new ItemClickListener() {
        @Override
        public void onClick(View view, int position, boolean isLongClick) {
            if(isLongClick){
                Toast.makeText(context, listData.get(position) + " chosen!", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(context, listData.get(position) + " chosen!", Toast.LENGTH_SHORT).show();
            }
        }
    });
}

そして、これはデータを挿入するときの私のコードです

RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recycler_foodcourt);
    recyclerView.setHasFixedSize(true);
    layoutManager = new GridLayoutManager(this, 2);
    recyclerView.setLayoutManager(layoutManager);
    adapter = new RecyclerAdapter(listData, this);
    recyclerView.setAdapter(adapter);
for (int i = 1; i <= 6; i++){
        listData.add("Foodcourt " + i);
    }

私はこれにあるコードを使用しましたビデオ このRecyclerView/CardViewを作成するために、それが(部分的に)どのように機能するかを理解した後でも、各アイテムに写真を割り当てることができません。助けてください、ありがとう!

あなたの答え
  • 解決した方法 # 1

    画像がドロアブルからのものである場合、これを書いてください:

    Integer[] images = new Integer[]{R.drawable.image1, R.drawable.image2....}; // Provide 6 Images or it will crash saying null pointer exception
    ArrayList<Integer> loadImage = new ArrayList<>();
    
    

    アクティビティクラスで。

    次に、forループに書き込みます。

    for (int i = 1; i <= 6; i++){
        listData.add("Foodcourt " + i);
        loadImage.add(images[i]);
    }
    
    

    次に、この変更を行い、

    adapter = new RecyclerAdapter(listData, loadImage, this);
    recyclerView.setAdapter(adapter);
    
    

    次に、アダプターでArraylistを次のように作成します。

    ArrayList<Integer> Images = new ArrayList<>();
    
    

    次に、以下のコードのように変更します:

    public RecyclerAdapter(List<String> listData, List<Integer> listImages, Context context) { 
       this.listData = listData;
       this.Images = listImages;
       this.context = context;
    }
    
    

    最後に、onBindViewHolderで次のように変更します。

    holder.imgView.setImageDrawable(ContextCompat.getDrawable(context, Images.get(position)));
    
    

    それだけです。recyclerviewの各アイテムに画像が表示されるはずです。

  • 解決した方法 # 2

    ループコードが正しい場所にありません。データをコンストラクターに渡した後、リストに追加します。これを修正するコードは次のとおりです。

    RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recycler_foodcourt);
        recyclerView.setHasFixedSize(true);
        layoutManager = new GridLayoutManager(this, 2);
        recyclerView.setLayoutManager(layoutManager);
    for (int i = 1; i <= 6; i++){
            listData.add("Foodcourt " + i);
        }
        adapter = new RecyclerAdapter(listData, this);
        recyclerView.setAdapter(adapter);
    
    

  • 解決した方法 # 3

    listData   images を含める必要があります  異なる URLs の  異なる images を表示する   listView の異なるカードに 。

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ javascript - サーバーレスカスタムオーソライザーの結果を未定義に