Listensteuerelement ListView

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert