5

Voglio creare una galleria di immagini con un TextView come intestazione e ImageViews in uncome viene visualizzato in questo figure.Android: Come implementare una galleria di immagini con RecyclerView

Io uso un RecyclerView per ridurre i le risorse per la mia app e implementare le immagini con molti ArrayList come:

 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 
 
     ));

Ora la mia domanda: Qual è la soluzione migliore per creare una voce vuota in una riga di questo ArrayList, se ad es Ho cinque ArrayList con 15 voci e due solo 14 o 13 voci. Ma voglio la voce vuota nella riga esatta e non alla fine. Ho provato a implementare uno null anziché lo R.drawable. ma questo porta a un arresto anomalo dell'app.

+0

Vuoi mostrare un'immagine predefinita quando un drawable è vuoto? –

+0

Questa sarebbe una possibilità. Ma no, non voglio mostrare un'immagine di default, perché HorizontalScrollView dovrebbe fermarsi dopo l'ultima immagine di ogni raw. –

risposta

1

vorrei sottoporre la mia risposta in una domanda un po 'simile: https://stackoverflow.com/a/34462696/1658267 (! NB andando avanti, mi piacerebbe utilizzare classe/metodi di denominazione da lì)

L'unica differenza sarebbe di sostituire TextViews con ImageView S. Come questo:

<?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> 

Per quanto riguarda gli slot vuoti - ci sei diverse opzioni:

  • È possibile passare i valori nulli, e poi in qualcosa che è stato chiamato ChipView (nel tuo caso - vista con immagini), in displayItem() metodo di controllo se parametro è nullo - allora basta impostare larghezza adeguata al View
  • è possibile creare separato viewType per orizzontale RecyclerView e creare una vista vuoto per esso (come segnaposto). Allora avete bisogno un po 'di aggiornare 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]); 
        } 
    } 
    

    e creare un EmptyView, con pre-definito non-0 larghezza.

Personalmente preferisco la seconda opzione (disaccoppiamento, più facile da mantenere onClick - senza logica in più lì, etc.)

Spero, aiuta.

Problemi correlati