onCreateViewHolder()
должен содержать код, который создает ViewHolder, а onBindViewHolder()
должен заполнять его данными. Любой другой подход вызовет проблемы, когда ваша коллекция будет содержать много элементов и будет прокручиваться пользователем.
Насколько я вижу, в вашем случае созданный макет не отличается независимо от значений CAT_IMAGE_IDS.get(i).getButton()
и CAT_IMAGE_IDS.get(i).getDummy()
. Это означает, что тело onBindViewHolder()
должно выглядеть так:
ViewGroup viewGroup = (ViewGroup) LayoutInflater.from(parent.getContext()).inflate(R.layout.widget_holder, parent, false);
LinearLayout ln = new LinearLayout(parent.getContext());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(230, 250, Gravity.CENTER);
ln.setLayoutParams(params);
viewGroup.addView(ln);
return new ItemViewHolder(viewGroup);
Обратите внимание, что я оставил только код, который фактически создает макет, а не часть, которая устанавливает видимость - это должно быть сделано внутри onBindViewHolder()
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
if (CAT_IMAGE_IDS.get(position).getButton()){
holder.itemView.setVisibility(View.VISIBLE);
} else if (CAT_IMAGE_IDS.get(position).getDummy()){
holder.itemView.setVisibility(View.INVISIBLE);
}
}
Как правило, onBindViewHolder()
используется не только для изменения видимости элементов, например, для заполнения представлений текстами и рисунками.
Вы можете проверить официальное руководство для получения дополнительной информации.