5

Ich möchte eine Bildergalerie mit einem TextView als Header und ImageViews in einem HorizontalScrollView erstellen, wie es in diesem figure angezeigt wird.Android: So implementieren Sie eine Bildergalerie mit RecyclerView

Ich benutze einen RecyclerView die Ressourcen für meine Anwendung zu reduzieren und die Bilder mit vielen ArrayList wie zu implementieren:

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

Nun meine Frage: Was ist die beste Lösung zu schaffen ein leerer Eintrag in einer Zeile dieser ArrayList, wenn z Ich habe fünf ArrayList mit 15 Einträgen und zwei haben nur 14 oder 13 Einträge. Aber ich möchte den leeren Eintrag in der exakten Zeile und nicht am Ende. Ich habe versucht, eine null anstelle der R.drawable. zu implementieren, aber dies führt zu einem Absturz der App.

+0

Möchten Sie ein Standardbild anzeigen, wenn ein Zeichenfeld leer ist? –

+0

Das wäre eine Möglichkeit. Aber nein, ich möchte kein Standardbild anzeigen, da der HorizontalScrollView nach dem letzten Bild jedes Rohbilds anhalten soll. –

Antwort

1

Ich mag würde meine eigene Antwort auf eine etwas ähnliche Frage beziehen: https://stackoverflow.com/a/34462696/1658267 (! NB geht nach vorn, würde ich Klasse/Methoden von dort verwendet Namensgebung)

Der einzige Unterschied wäre TextViews mit ImageView ersetzen s. Wie folgt aus:

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

Im Hinblick auf die leeren Slots - es sind mehrere Optionen:

  • Sie können NULL-Werte übergeben und dann in etwas, das ChipView (in Ihrem Fall - Ansicht mit Bild) genannt wurde, wenn der Parameter in displayItem() Methode Prüfung ist null - dann setzen gerade die richtige Breite der View
  • können Sie separate erstellen viewType für horizontale RecyclerView und erstellen Sie eine leere Ansicht für sie (als Platzhalter). Dann müssen Sie etwas ChipsAdapter aktualisieren:

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

    und ein EmptyView schaffen, mit nicht-0 Breite vordefiniert.

Persönlich bevorzuge ich die zweite Option (Entkopplung, einfacher onClick zu halten - ohne zusätzliche Logik gibt, etc.)

Ich hoffe, es hilft.