recyclerviewAan de slag met recyclerview


Opmerkingen

Deze sectie geeft een overzicht van wat recyclerview is en waarom een ontwikkelaar het misschien wil gebruiken.

Het moet ook alle grote onderwerpen binnen recyclerview vermelden en een link naar de gerelateerde onderwerpen bevatten. Aangezien de documentatie voor recyclerview nieuw is, moet u mogelijk eerste versies van die gerelateerde onderwerpen maken.

Installatie & Setup

De weergave van elementen in een lijst of rasters is een veel voorkomend patroon in mobiele applicaties. De gebruiker ziet een verzameling items en kan er doorheen bladeren. De verzameling items kan een lijst, een raster of een andere gestructureerde weergave van gegevens zijn.

De RecyclerView widget is een meer geavanceerde en flexibele versie van ListView . Deze widget is een container voor het weergeven van grote gegevenssets die zeer efficiënt kunnen worden gescrolld door een beperkt aantal weergaven te behouden. Gebruik de RecyclerView-widget wanneer u gegevensverzamelingen hebt waarvan de elementen tijdens runtime veranderen op basis van gebruikersacties of netwerkgebeurtenissen.

De klasse RecyclerView vereenvoudigt de weergave en verwerking van grote gegevenssets door:

  • Lay-outmanagers voor het positioneren van items
  • Standaardanimaties voor algemene itembewerkingen, zoals het verwijderen of toevoegen van items

U hebt ook de flexibiliteit om aangepaste lay-outbeheerders en animaties voor RecyclerView widgets te definiëren.

voer hier de afbeeldingsbeschrijving in

Om de RecyclerView widget te gebruiken, moet u een adapter en een lay-outmanager opgeven. RecyclerView.Adapter klasse RecyclerView.Adapter om een adapter te maken. De details van de implementatie zijn afhankelijk van de specificaties van uw gegevensset en het type weergaven.

voer hier de afbeeldingsbeschrijving in

Een lay-outmanager plaatst itemviews in een RecyclerView en bepaalt wanneer itemviews die niet langer zichtbaar zijn voor de gebruiker opnieuw moeten worden gebruikt. Om een weergave opnieuw te gebruiken (of te recyclen), kan een lay-outmanager de adapter vragen de inhoud van de weergave te vervangen door een ander element dan de gegevensset. Op deze manier recyclen van weergaven verbetert de prestaties door het maken van onnodige weergaven of het uitvoeren van dure findViewById () -zoekopdrachten te voorkomen .

RecyclerView biedt deze ingebouwde lay-outbeheerders:

Breid de klasse RecyclerView.LayoutManager uit om een aangepaste lay- outmanager te maken .

Om nu een RecyclerView toe te voegen, moet u de volgende afhankelijkheid toevoegen aan uw build.gradle

dependencies {
    compile 'com.android.support:recyclerview-v7:23.4.0'
}
 

Voeg nu een RecyclerView aan uw lay-out zoals deze.

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

Nadat u een RecyclerView widget aan uw lay-out hebt toegevoegd, verkrijgt u een greep naar het object, verbindt u deze met een lay-outmanager en bevestigt u een adapter voor de gegevens die moeten worden weergegeven.

public class MyActivity extends Activity {
    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity);
        mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

        // use this setting to improve performance if you know that changes
        // in content do not change the layout size of the RecyclerView
        mRecyclerView.setHasFixedSize(true);

        // use a linear layout manager
        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);

        // specify an adapter (see also next example)
        mAdapter = new MyAdapter(myDataset);
        mRecyclerView.setAdapter(mAdapter);
    }
    ...
}
 

De adapter biedt toegang tot de items in uw gegevensset, maakt weergaven voor items en vervangt de inhoud van sommige weergaven door nieuwe gegevensitems wanneer het oorspronkelijke item niet langer zichtbaar is. Het volgende codevoorbeeld toont een eenvoudige implementatie voor een gegevensset die bestaat uit een reeks tekenreeksen die worden weergegeven met behulp van TextView widgets.

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private String[] mDataset;

    // Provide a reference to the views for each data item
    // Complex data items may need more than one view per item, and
    // you provide access to all the views for a data item in a view holder
    public static class ViewHolder extends RecyclerView.ViewHolder {
        // each data item is just a string in this case
        public TextView mTextView;
        public ViewHolder(TextView v) {
            super(v);
            mTextView = v;
        }
    }

    // Provide a suitable constructor (depends on the kind of dataset)
    public MyAdapter(String[] myDataset) {
        mDataset = myDataset;
    }

    // Create new views (invoked by the layout manager)
    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {
        // create a new view
        View v = LayoutInflater.from(parent.getContext())
                               .inflate(R.layout.my_text_view, parent, false);
        // set the view's size, margins, paddings and layout parameters
        ...
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        // - get element from your dataset at this position
        // - replace the contents of the view with that element
        holder.mTextView.setText(mDataset[position]);

    }

    // Return the size of your dataset (invoked by the layout manager)
    @Override
    public int getItemCount() {
        return mDataset.length;
    }
}
 

Voeg eerst de ondersteuningsbibliotheek aan uw project toe: voeg binnen het build.gradle-bestand van de app de afhankelijkheid toe.

Open in de projectweergave onder "app" het bestand build.gradle