Xamarin.Android RecyclerView-Grundlagen


Beispiel

Dies ist ein Beispiel für die Verwendung der Android Support Library V7 RecyclerView . Unterstützungsbibliotheken werden im Allgemeinen empfohlen, da sie abwärtskompatible Versionen neuer Funktionen bereitstellen, nützliche Elemente der Benutzeroberfläche enthalten, die nicht im Framework enthalten sind, und eine Reihe von Dienstprogrammen bereitstellen, auf die Apps zurückgreifen können.

Um RecyclerView , installieren wir die erforderlichen Nuget-Pakete. Zuerst suchen wir nach v7 recyclerview . Scrollen Sie nach unten, bis die Xamarin Android Support Library - v7 RecyclerView . Wählen Sie es aus und klicken Sie auf Paket hinzufügen .

Geben Sie hier die Bildbeschreibung ein

Alternativ ist die Android Support Library V7 RecyclerView als Xamarin-Komponente verfügbar. Um die Komponente hinzuzufügen, klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Components im Android-Projekt, und klicken Sie auf Get More Components .

Geben Sie hier die Bildbeschreibung ein

Suchen Sie im angezeigten Fenster "Component Store" nach RecyclerView. Android Support Library V7 RecyclerView in der Suchliste Android Support Library V7 RecyclerView . Klicken Sie dann auf Add to App . Die Komponente wird dem Projekt hinzugefügt.

Geben Sie hier die Bildbeschreibung ein

Der nächste Schritt ist das Hinzufügen der RecyclerView zu einer Seite. In der axml Datei (Layoutdatei) können Sie wie axml RecyclerView hinzufügen.

<android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

Für RecyclerView müssen mindestens zwei ViewHolder für die grundlegende Standardimplementierung eingerichtet werden: Adapter und ViewHolder . Adapter bläst Elementlayouts auf und bindet Daten an Ansichten, die in einer RecyclerView angezeigt werden. ViewHolder sucht und speichert Ansichtsreferenzen. Der Ansichtshalter hilft auch beim Erkennen von Elementklicks.

Hier ist ein grundlegendes Beispiel für die Adapterklasse

public class MyAdapter : RecyclerView.Adapter
{
    string [] items;

    public MyAdapter (string [] data)
    {
        items = data;
    }

    // Create new views (invoked by the layout manager)
    public override RecyclerView.ViewHolder OnCreateViewHolder (ViewGroup parent, int viewType)
    {   
        // set the view's size, margins, paddings and layout parameters
        var tv = new TextView (parent.Context);
        tv.SetWidth (200);
        tv.Text = "";

        var vh = new MyViewHolder (tv);
        return vh;
    } 

    // Replace the contents of a view (invoked by the layout manager)
    public override void OnBindViewHolder (RecyclerView.ViewHolder viewHolder, int position)
    {
        var item = items [position];

        // Replace the contents of the view with that element
        var holder = viewHolder as MyViewHolder;
        holder.TextView.Text = items[position];
    }

    public override int ItemCount {
        get {
            return items.Length;
        }
    }
}

In der OnCreateViewHolder Methode OnCreateViewHolder wir zuerst eine View auf und erstellen eine Instanz der ViewHolder-Klasse. Diese Instanz muss zurückgegeben werden. Diese Methode wird vom Adapter aufgerufen, wenn eine neue Instanz von ViewHolder erforderlich ist. Diese Methode wird nicht für jede einzelne Zelle aufgerufen. Wenn RecyclerView genug Zellen zum Füllen der Ansicht hat, werden die alten Zellen, die aus der Ansicht gescrollt werden, für weitere Zellen wiederverwendet.

Der OnBindViewHolder Callback wird vom Adapter aufgerufen, um die Daten an der angegebenen Position anzuzeigen. Diese Methode sollte den Inhalt der itemView aktualisieren, um das Element an der angegebenen Position wiederzugeben.

Da die Zelle nur eine einzige TextView , können wir einen einfachen ViewHolder wie folgt verwenden.

public class MyViewHolder : RecyclerView.ViewHolder 
{
    public TextView TextView { get; set; }


    public MyViewHolder (TextView v) : base (v)
    {
        TextView = v;
    }
}

Der nächste Schritt besteht darin, Dinge in Activity .

RecyclerView mRecyclerView;
MyAdapter mAdapter;
protected override void OnCreate (Bundle bundle)
{
    base.OnCreate (bundle);
    SetContentView (Resource.Layout.Main);
    mRecyclerView = FindViewById<RecyclerView> (Resource.Id.recyclerView);

    // Plug in the linear layout manager:
    var layoutManager = new LinearLayoutManager (this) { Orientation = LinearLayoutManager.Vertical };
    mRecyclerView.SetLayoutManager (layoutManager);
    mRecyclerView.HasFixedSize = true;

    var recyclerViewData = GetData();
    // Plug in my adapter:
    mAdapter = new MyAdapter (recyclerViewData);
    mRecyclerView.SetAdapter (mAdapter);
}

string[] GetData()
{ 
     string[] data;
     .
     .
     .
     return data;
}

Die LayoutManager-Klasse ist für das Messen und Positionieren von Elementansichten in einer RecyclerView sowie für die Festlegung der Richtlinie dafür verantwortlich, wann Elementansichten wieder verwendet werden sollen, die für den Benutzer nicht mehr sichtbar sind. Vor der RecyclerView mussten wir ListView , um Zellen in einer vertikal scrollenden Liste GridView , und GridView , um Elemente in einem zweidimensionalen, scrollbaren Raster anzuzeigen. Beides können wir jetzt mit RecyclerView erreichen, indem wir einen anderen LayoutManger einstellen. LinearLayoutManager ordnet Zellen wie in einem ListView an, und GridLayoutManager ordnet Zellen im Grid- GridLayoutManager .