Das Folgende ist ein minimales Beispiel, das wie das folgende Bild aussieht.
Beginnen Sie mit einer leeren Aktivität. Sie führen die folgenden Aufgaben aus, um die RecyclerView hinzuzufügen. Sie müssen lediglich den Code in jeden Abschnitt kopieren und einfügen. Später können Sie es an Ihre Bedürfnisse anpassen.
- Fügen Sie dem Gradle Abhängigkeiten hinzu
- Fügen Sie die XML-Layoutdateien für die Aktivität und für die RecyclerView-Zeile hinzu
- Stellen Sie den RecyclerView-Adapter her
- Initialisieren Sie die RecyclerView in Ihrer Aktivität
Aktualisieren Sie Gradle-Abhängigkeiten
Stellen Sie sicher, dass die folgenden Abhängigkeiten in Ihrer App- gradle.build
Datei enthalten sind:
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
Sie können die Versionsnummern auf die aktuellsten aktualisieren . Verwenden Sie diese Option, compile
anstatt implementation
Android Studio 2.x noch zu verwenden.
Aktivitätslayout erstellen
Fügen Sie das RecyclerView
Ihrem XML-Layout hinzu.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/rvAnimals"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
Zeilenlayout erstellen
Jede Zeile in unserer RecyclerView
wird nur eine einzige haben TextView
. Erstellen Sie eine neue Layoutressourcendatei.
recyclerview_row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp">
<TextView
android:id="@+id/tvAnimalName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"/>
</LinearLayout>
Erstellen Sie den Adapter
Sie RecyclerView
benötigen einen Adapter, um die Ansichten in jeder Zeile mit Ihren Daten zu füllen. Erstellen Sie eine neue Java-Datei.
MyRecyclerViewAdapter.java
public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> {
private List<String> mData;
private LayoutInflater mInflater;
private ItemClickListener mClickListener;
// data is passed into the constructor
MyRecyclerViewAdapter(Context context, List<String> data) {
this.mInflater = LayoutInflater.from(context);
this.mData = data;
}
// inflates the row layout from xml when needed
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.recyclerview_row, parent, false);
return new ViewHolder(view);
}
// binds the data to the TextView in each row
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
String animal = mData.get(position);
holder.myTextView.setText(animal);
}
// total number of rows
@Override
public int getItemCount() {
return mData.size();
}
// stores and recycles views as they are scrolled off screen
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView myTextView;
ViewHolder(View itemView) {
super(itemView);
myTextView = itemView.findViewById(R.id.tvAnimalName);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition());
}
}
// convenience method for getting data at click position
String getItem(int id) {
return mData.get(id);
}
// allows clicks events to be caught
void setClickListener(ItemClickListener itemClickListener) {
this.mClickListener = itemClickListener;
}
// parent activity will implement this method to respond to click events
public interface ItemClickListener {
void onItemClick(View view, int position);
}
}
Anmerkungen
- Obwohl dies nicht unbedingt erforderlich ist, habe ich die Funktionalität zum Abhören von Klickereignissen in den Zeilen hinzugefügt. Dies war in der alten verfügbar
ListViews
und ist ein allgemeines Bedürfnis. Sie können diesen Code entfernen, wenn Sie ihn nicht benötigen.
Initialisieren Sie RecyclerView in Aktivität
Fügen Sie Ihrer Hauptaktivität den folgenden Code hinzu.
MainActivity.java
public class MainActivity extends AppCompatActivity implements MyRecyclerViewAdapter.ItemClickListener {
MyRecyclerViewAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// data to populate the RecyclerView with
ArrayList<String> animalNames = new ArrayList<>();
animalNames.add("Horse");
animalNames.add("Cow");
animalNames.add("Camel");
animalNames.add("Sheep");
animalNames.add("Goat");
// set up the RecyclerView
RecyclerView recyclerView = findViewById(R.id.rvAnimals);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new MyRecyclerViewAdapter(this, animalNames);
adapter.setClickListener(this);
recyclerView.setAdapter(adapter);
}
@Override
public void onItemClick(View view, int position) {
Toast.makeText(this, "You clicked " + adapter.getItem(position) + " on row number " + position, Toast.LENGTH_SHORT).show();
}
}
Anmerkungen
- Beachten Sie, dass die Aktivität das implementiert
ItemClickListener
, was wir in unserem Adapter definiert haben. Dies ermöglicht es uns, Zeilenklickereignisse in zu verarbeiten onItemClick
.
Fertig
Das ist es. Sie sollten jetzt in der Lage sein, Ihr Projekt auszuführen und etwas Ähnliches wie das Bild oben zu erhalten.
Weiter geht's
Hinzufügen eines Teilers zwischen Zeilen
Sie können einen einfachen Teiler wie diesen hinzufügen
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(),
layoutManager.getOrientation());
recyclerView.addItemDecoration(dividerItemDecoration);
Wenn Sie etwas Komplexeres wünschen, lesen Sie die folgenden Antworten:
Ändern der Zeilenfarbe beim Klicken
In dieser Antwort erfahren Sie, wie Sie die Hintergrundfarbe ändern und den Ripple-Effekt hinzufügen, wenn Sie auf eine Zeile klicken.
Zeilen aktualisieren
In dieser Antwort erfahren Sie, wie Sie Zeilen hinzufügen, entfernen und aktualisieren.
Weiterführende Literatur