Android: как реализовать галерею изображений с помощью RecyclerView

Я хочу создать галерею изображений с заголовком TextView as и ImageViews в HorizontalScrollView как показано на этом рисунке .

Я использую RecyclerView для сокращения ресурсов для моего приложения и реализую изображения со многими ArrayList такими как:

  itemFotoIDs.addAll(Arrays.asList( R.drawable.cable_crunches_1 ,R.drawable.dips_1 ,R.drawable.kabelrudern_breit_1 ,R.drawable.kabelrudern_eng_1 ,R.drawable.klimmzug_1 ,R.drawable.kh_schulterdruecken_1 ,R.drawable.kh_curls_1 ,R.drawable.lh_bankdruecken_1 ,R.drawable.lh_bankdruecken_eng_1 ,R.drawable.lh_kniebeuge_1 ,R.drawable.lh_kreuzheben_1 ,R.drawable.lh_schraegbankdruecken_1 ,R.drawable.latzug_obergriff_1 ,R.drawable.seitheben_1 ,R.drawable.szhantel_curls_1 )); 

Теперь мой вопрос: что является лучшим решением для создания пустой записи в строке этого ArrayList , если, например, у меня есть пять ArrayList с 15 записями, а два имеют только 14 или 13 записей. Но я хочу, чтобы пустая запись была в точном ряду, а не в конце. Я попытался реализовать null вместо R.drawable. Но это приводит к сбою приложения.

Я хотел бы направить свой ответ в несколько схожих вопросах: https://stackoverflow.com/a/34462696/1658267 (NB! Вперёд, я бы использовал имена классов / методов)

Единственное различие заключалось бы в замене TextViews на ImageView s. Как это:

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:background="@drawable/rounded_background" android:layout_margin="4dp" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/chipImageView" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </FrameLayout> 

Что касается пустых слотов – есть несколько вариантов:

  • Вы можете передать null, а затем в то, что было ChipView (в вашем случае – просмотр с изображением), в displayItem() проверьте, является ли параметр нулевым – тогда просто установите правильную ширину в View
  • Вы можете создать отдельный viewType для горизонтального RecyclerView и создать для него пустой вид (в качестве заполнителя). Затем вам нужно немного обновить ChipsAdapter :

     static int IMAGE_VIEW_TYPE = 1; static int EMPTY_SLOP_TYPE = 2; @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType = IMAGE_VIEW_TYPE) { return new ChipViewHolder(new ChipView(parent.getContext())); } else { return new ChipViewHolder(new EmptyView(parent.getContext())); } } @Override public int getItemViewType(int position) { return chipsArray[position] == null? EMPTY_SLOP_TYPE : IMAGE_VIEW_TYPE; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder.itemView instanceof ChipView) { ((ChipView) holder.itemView).displayItem(chipsArray[position]); } } 

    И создайте EmptyView с заранее определенной шириной не-0.

Лично я предпочитаю второй вариант (развязка, проще поддерживать onClick – без дополнительной логики там и т. Д.)

Я надеюсь, что это помогает.