1062 Stimmen

Wie man RecyclerView mit mehreren Ansichtstypen erstellt

Von Erstellen von dynamischen Listen mit RecyclerView:

Wenn wir einen RecyclerView.Adapter erstellen, müssen wir einen ViewHolder angeben, der sich mit dem Adapter verbindet.

public class MyAdapter extends RecyclerView.Adapter {

    private String[] mDataset;

    public MyAdapter(String[] myDataset) {
        mDataset = myDataset;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView mTextView;
        public ViewHolder(TextView v) {
            super(v);
            mTextView = v;
        }
    }

    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.some_layout, parent, false);

        //findViewById...

        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.mTextView.setText(mDataset[position]);
    }

    @Override
    public int getItemCount() {
        return mDataset.length;
    }
}

Ist es möglich, einen RecyclerView mit mehreren Ansichtstypen zu erstellen?

1voto

Dragas Punkte 842

Eigentlich würde ich gerne an Antons Antwort anknüpfen.

Weil getItemViewType(int position) einen Integer-Wert zurückgibt, kannst du die Layout-Ressourcen-ID zurückgeben, die du aufblasen müsstest. Auf diese Weise sparst du etwas Logik in der Methode onCreateViewHolder(ViewGroup parent, int viewType).

Außerdem würde ich nicht empfehlen, intensive Berechnungen in getItemCount() durchzuführen, da diese bestimmte Funktion mindestens 5 Mal beim Rendern der Liste aufgerufen wird, sowie beim Rendern jeder Elemente über die sichtbaren Elemente hinaus. Leider ist die Methode notifyDatasetChanged() final, daher kannst du sie nicht wirklich überschreiben, aber du kannst sie von einer anderen Funktion im Adapter aufrufen.

1voto

Miguel Lasa Punkte 450

Ich sehe, dass es viele großartige Antworten gibt, unglaublich detailliert und umfangreich. In meinem Fall verstehe ich Dinge immer besser, wenn ich dem Denkprozess fast von Grund auf Schritt für Schritt folge. Ich würde empfehlen, dass du diesen Link überprüfst und wann immer du ähnliche Fragen hast, nach jedem Codelab suchst, das das Problem anspricht.

Android Kotlin Grundlagen: Header in RecyclerView

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X