Поэтому я хочу добавить изображения в мои предметы. Прямо сейчас я могу отображать слова для каждого CardView в RecyclerView. Тем не менее, для фотографий, я не могу этого сделать. Я попытался добавить 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, но даже после понимания как это работает (частично), я все еще не могу назначить фотографию для каждого элемента. Пожалуйста, помогите мне, спасибо!

0
Jarod Tan 20 Авг 2018 в 14:15

3 ответа

Лучший ответ

Если изображения взяты из рисунка, напишите это:

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 .. Попробуйте это ..

0
Ümañg ßürmån 20 Авг 2018 в 12:44

Ваш код цикла не в правильном месте. Вы добавляете данные в список после передачи их в конструктор. Вот код, чтобы это исправить:

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);
1
Sunny 20 Авг 2018 в 11:23

listData должен содержать images разных URLs для отображения разных images на разных карточках в listView.

0
Sunny 20 Авг 2018 в 14:28
51929581