Listensteuerelement ListView – Einfache Verwendung
Dies ist ein sehr häufig verwendetes Steuerelement.
Unser Bildschirmplatz ist begrenzt, aber mit diesem Steuerelement können wir mehr Daten auf dem Bildschirm anzeigen.
Durch Wischen mit dem Finger nach oben oder unten können Sie Daten, die sich außerhalb des Bildschirms befinden, in den sichtbaren Bereich bringen.
Einfache Verwendung
Erstellen Sie ein neues Projekt TestListView.
Fügen Sie der Ansicht den folgenden Code hinzu, um ein ListView einzuschließen.
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/listview1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>Code-Sprache: HTML, XML (xml)
Datenquelle initialisieren
public class MainActivity extends AppCompatActivity {
private String[] courses = {"Java Grundlagen", "Android Grundlagen", "C# Grundlagen", "C Sprache", "ASP.NET MVC"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, courses);
ListView listView = (ListView) findViewById(R.id.listview1);
listView.setAdapter(adapter);
}
}Code-Sprache: JavaScript (javascript)
Diese Daten können aus dem Internet heruntergeladen (z. B. über eine Web-API), aus einer Datenbank gelesen oder sogar direkt im Code als Zeichenfolgenarray definiert werden.
Daten können nicht direkt an ein ListView übergeben werden; dazu ist ein Adapter erforderlich.
Android bietet viele Adapter. Hier verwenden wir ArrayAdapter.
Wir verwenden android.R.layout.simple_list_item_1 als untergeordnetes Layout für das ListView.
Dies ist eine integrierte Android-Layoutdatei, die nur ein TextView enthält, um Text anzuzeigen.

Listensteuerelement ListView – Oberfläche anpassen
Nur Text anzuzeigen ist etwas zu einfach
Wir können in den Listenelementen umfangreichere Inhalte anzeigen.
Eine Book-Entitätsklasse hinzufügen
package com.foxdevelop.www.testlistview;
public class Book {
private String name;
private int imageId;
public Book (String name, int imageId) {
this.name = name;
this.imageId = imageId;
}
public String getName() {
return name;
}
public int getImageId() {
return imageId;
}
}Code-Sprache: PHP (php)
Eine Layoutdatei für Bücher hinzufügen
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageid"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="12dp"
/>
</LinearLayout>Code-Sprache: HTML, XML (xml)
Benutzerdefinierter Adapter
package com.foxdevelop.www.testlistview;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
public class BookAdapter extends ArrayAdapter<Book> {
private int resource;
public BookAdapter(@NonNull Context context, int resource, @NonNull List<Book> objects) {
super(context, resource, objects);
this.resource = resource;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
Book book = getItem(position);
View view = LayoutInflater.from(getContext()).inflate(resource, parent, false);
ImageView imageView = (ImageView) view.findViewById(R.id.imageid);
imageView.setImageResource(book.getImageId());
TextView name = (TextView) view.findViewById(R.id.name);
name.setText(book.getName());
return view;
}
}Code-Sprache: JavaScript (javascript)
Datenquelle in onCreate der Aktivität initialisieren
package com.foxdevelop.www.testlistview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List<Book> courses = new ArrayList<Book>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LoadBooks();
BookAdapter adapter = new BookAdapter(MainActivity.this, R.layout.booklistview, courses);
ListView listView = (ListView) findViewById(R.id.listview1);
listView.setAdapter(adapter);
}
private void LoadBooks() {
courses.add(new Book("Erstes in der Geschichte des menschlichen Denkens", R.drawable.access));
courses.add(new Book("Politik der ausbeutenden Klasse", R.drawable.book));
courses.add(new Book("Wertvolles Dokument des antiken indischen Rechts", R.drawable.bookmarks));
courses.add(new Book("Kaiserliches Lehrbuch zum römischen Privatrecht", R.drawable.center));
courses.add(new Book("Wissen ist Macht", R.drawable.date));
courses.add(new Book("Mein Bürgerliches Gesetzbuch wird ewig bestehen", R.drawable.clock));
courses.add(new Book("Klassisches Werk zur amerikanischen Demokratie", R.drawable.ftp));
courses.add(new Book("Autorisiertes Lehrbuch zum westlichen Völkerrecht", R.drawable.notes));
courses.add(new Book("Meisterwerk, das der historischen Wahrheit am nächsten kommt", R.drawable.set));
courses.add(new Book("Ein Spiegel der religiösen Reformation", R.drawable.energy));
courses.add(new Book("Das Geheimnis der Theologie ist Anthropologie", R.drawable.tux));
courses.add(new Book("Berühmtes Werk, das vor über 300 Jahren nach China eingeführt wurde", R.drawable.science));
courses.add(new Book("Zeitloses Meisterwerk über Heuchler", R.drawable.joystick));
courses.add(new Book("Eliteuniversität ohne Mauern", R.drawable.center));
courses.add(new Book("Erster utopischer Plan in der Geschichte des menschlichen Denkens", R.drawable.access));
}
}Code-Sprache: JavaScript (javascript)
Durch Setzen von
android:orientation=“horizontal“
können Sie sie horizontal anordnen.


ListView-Leistung optimieren
Derzeit wird jedes Mal, wenn die Aktivität geöffnet wird, die Datenquelle neu geladen, was die Leistung beeinträchtigt. Durch Zwischenspeichern der View können wir die Geschwindigkeit verbessern.
Durch Überprüfen von convertView müssen wir die Ansicht nicht jedes Mal neu abrufen.
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
Book book = getItem(position);
View view;
if (convertView == null) {
view = LayoutInflater.from(getContext()).inflate(resource, parent, false);
} else {
view = convertView;
}
ImageView imageView = (ImageView) view.findViewById(R.id.imageid);
imageView.setImageResource(book.getImageId());
TextView name = (TextView) view.findViewById(R.id.name);
name.setText(book.getName());
return view;
}Code-Sprache: PHP (php)
Steuerelemente zwischenspeichern
Definieren Sie eine Klasse, die das ImageView- und das TextView-Steuerelement enthält.
class ViewData {
ImageView imageUI;
TextView textViewUI;
}Code-Sprache: JavaScript (javascript)
package com.foxdevelop.www.testlistview;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
public class BookAdapter extends ArrayAdapter<Book> {
private int resource;
public BookAdapter(@NonNull Context context, int resource, @NonNull List<Book> objects) {
super(context, resource, objects);
this.resource = resource;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
Book book = getItem(position);
View view;
ViewUI viewUI;
if (convertView == null) {
view = LayoutInflater.from(getContext()).inflate(resource, parent, false);
ImageView imageView = (ImageView) view.findViewById(R.id.imageid);
TextView textView = (TextView) view.findViewById(R.id.name);
viewUI = new ViewUI();
viewUI.imageUI = imageView;
viewUI.textViewUI = textView;
view.setTag(viewUI);
} else {
view = convertView;
viewUI = (ViewUI) view.getTag();
}
viewUI.imageUI.setImageResource(book.getImageId());
viewUI.textViewUI.setText(book.getName());
return view;
}
class ViewUI {
ImageView imageUI;
TextView textViewUI;
}
}Code-Sprache: JavaScript (javascript)
ListView-Klickereignisse
Klickereignisse zu ListView-Elementen hinzufügen.
Wir können beispielsweise den Buchtitel anzeigen, wenn ein Element angeklickt wird.
In der onCreate-Methode der Hauptaktivität:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LoadBooks();
BookAdapter adapter = new BookAdapter(MainActivity.this, R.layout.booklistview, courses);
final ListView listView = (ListView) findViewById(R.id.listview1);
listView.setAdapter(adapter);
// Klickereignis
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Book b = courses.get(i);
Toast.makeText(MainActivity.this, b.getName(), Toast.LENGTH_LONG).show();
}
});
}Code-Sprache: PHP (php)
Abhängigkeiten in build.gradle hinzufügen
Configuration ‚compile‘ is obsolete and has been replaced with ‚implementation‘ and ‚api‘.
Es wird Ende 2018 entfernt werden. Weitere Informationen finden Sie unter: http://d.android.com/r/tools/update-dependency-configurations.html
Wir müssen Unterstützung für die Abhängigkeitsbibliothek
android.support.v7.widget.RecyclerView

<?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="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/testrecy"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</LinearLayout>Code-Sprache: HTML, XML (xml)
Verwendung des Scroll-Steuerelements RecyclerView – 1
ListView ist sehr leistungsfähig und wird heute noch häufig verwendet.
Allerdings ist die Leistung etwas schwach und die Erweiterbarkeit ist begrenzt.
Es unterstützt nur vertikales Scrollen; horizontales Scrollen ist nicht möglich.
RecyclerView ist eine verbesserte Version von ListView.
Es kann dieselben Effekte wie ListView erzielen und dessen Mängel optimieren.
Offiziell wird RecyclerView empfohlen.
Grundlegende Verwendung
Fügen Sie zunächst Ihrer gradle-Datei Folgendes hinzu:
compile ‚com.android.support:recyclerview-v7:27.1.1‘
Im vorherigen Abschnitt haben wir ein weiteres RecyclerView hinzugefügt.
<android.support.v7.widget.RecyclerView
android:id="@+id/testrecy"
android:layout_width="match_parent"
android:layout_height="match_parent"/>Code-Sprache: HTML, XML (xml)
Wir verwenden weiterhin das Buchbeispiel.