Einfache Beispiele für Android ListView basierend auf der Arbeit mit Sammlungen und dem Abhören verschiedener Ereignisse.

*Ein ListView ist ein Android-Widget, das uns erlaubt, eine Liste von scrollbaren Elementen darzustellen.

ListView ist ein Adapterview wie Gridview und Spinner. Das bedeutet, dass sie einen Adapter benötigt, um ihre Elemente einzufügen. Der Adapter ist dafür verantwortlich, die Daten aus einer Inhaltsquelle zu beziehen.

Diese Quelle kann ein Array oder etwas Komplexeres wie eine Datenbank oder das Netzwerk sein. Nicht nur das, der Adapter ist auch für die Konvertierung der Ergebnisse jedes Elements in eine Ansicht verantwortlich, die in die Listenansicht eingefügt wird.

Das liegt daran, dass die ListView als Adapterview die Details, wie Typ und Inhalt, der enthaltenen Views nicht kennt. Daher wird sie die Ansichten bei Bedarf von einem ListAdapter anfordern. Zum Beispiel werden diese Ansichten abgefragt, wenn der Benutzer nach oben oder unten scrollt.

Jede der Ansichten in der ListView wird unmittelbar unter der vorherigen Ansicht in der Liste positioniert.

ListView API Definition

Hier ist die API-Definition von ListView.

java.lang.Object
   ↳    android.view.View
       ↳    android.view.ViewGroup
           ↳    android.widget.AdapterView<android.widget.ListAdapter>
               ↳    android.widget.AbsListView
                   ↳    android.widget.ListView

Man sieht deutlich, dass ListView im Paket android.widget angesiedelt ist und von der abstrakten Klasse AbsListView abstammt.

Wie zeigt man eine ListView an?

Nun, um eine ListView anzuzeigen, müssen Sie nur die ListView in das XML-Layout einfügen.

<ListView
      android_id="@+id/list_view"
      android_layout_width="match_parent"
      android_layout_height="match_parent" />
  1. android:id="@+id/list_view" - Wir weisen der ListView eine ID zu.
  2. android:layout_width="match_parent" - Wir stellen die Breite unserer ListView so ein, dass sie mit der des Layouts übereinstimmt, auf dem die ListView gerendert wird.
  3. android:layout_height="match_parent"` - Wir stellen die Höhe unserer ListView so ein, dass sie der Höhe des Layouts entspricht, auf dem die ListView gerendert wird.
Einstellung von ItemClicks auf Simple ListView.

Hier ist, wie wir auf itemClicks für unsere ListView hören werden, um eine einfache Toast-Nachricht anzuzeigen.

Wir müssen die Methode setOnItemClickListener() unserer ListView aufrufen und ihr eine anonyme Klasse AdapterView.OnItemClickListener() übergeben, und dann die Methode onItemClick() überschreiben.

In diesem Fall ist pos die Position des angeklickten Elements in der ListView.

        myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int pos, long id) {
                Toast.makeText(MainActivity.this, languages.get(i), Toast.LENGTH_SHORT).show();
            }
        });
Wie erstellen wir einen Custom Adapter für ListView.

Man kann mehrere Adapter verwenden, aber der am häufigsten verwendete ist BaseAdapter.

private class MyCustomAdapter extends BaseAdapter {

      // override other abstract methods here

      @Override
      public View getView(int position, View convertView, ViewGroup container) {
          if (convertView == null) {
              convertView = getLayoutInflater().inflate(R.layout.my_list_item, container, false);
          }

          ((TextView) convertView.findViewById(android.R.id.nameTxt))
                  .setText(getItem(position));
          return convertView;
      }
  }

Wie setzen wir einen Adapter auf eine ListView?

Wir setzen einen Adapter zu einem ListView mit der setAdapter() Methode. Diese Methode ist wie folgt:

public void setAdapter (ListAdapter adapter)

Die Methode setAdapter() ist für die Bindung unserer Daten an unser ListView verantwortlich.

Wir müssen einen Adapter an diese Methode übergeben. Dieser Adapter kann von einem WrapperListAdapter umhüllt sein, abhängig von den ListView-Funktionen, die gerade verwendet werden. Zum Beispiel wird das Hinzufügen von Kopf- und/oder Fußzeilen dazu führen, dass der Adapter umhüllt wird.

Ein WrapperListAdapter ist ein Listenadapter der einen anderen Listenadapter umhüllt.

Adapter ListAdapter: Der ListAdapter der für die Pflege der Daten, die dieser Liste zugrunde liegen, und für die Erzeugung einer Ansicht zur Darstellung eines Elements in diesem Datensatz verantwortlich ist.

Welche XML-Attribute sind in der ListView-Klasse definiert?

Die meisten der XML-Attribute, die Sie verwenden werden, sind in den übergeordneten Klassen wie AbsListView definiert, die auch von anderen Basisklassen wie ViewGroup und View erbt.

Die Klasse ListView hat jedoch auch die folgenden Attribute definiert:

1. android:divider Drawable oder Farbe zum Zeichnen zwischen Listenelementen.
2. android:divider Drawable oder Farbe zum Zeichnen zwischen den Listenelementen.
3. android:dividerHeight Höhe des Teilers.
4. android:entries Referenz auf eine Array-Ressource, die die ListView auffüllt.
5. android:footerDividersEnabled Wenn auf false gesetzt, wird die ListView die Trennlinie nicht vor jeder Fußzeilenansicht zeichnen.
6. android:headerDividersEnabled Wenn auf false gesetzt, wird die ListView die Trennlinie nicht nach jeder Kopfzeilenansicht zeichnen.

Mit welchen Arten von Adaptern kann ListView verwendet werden?

Hier sind einige der Adapter, die mit einer ListView verwendet werden können:

1. BaseAdapter Eine Superklasse von gemeinsamen Implementierungen für eine android.widget.Adapter Schnittstelle. Sie implementiert sowohl ListAdapter als auch SpinnerAdapter Schnittstellen.
2. ArrayAdapter Ein BaseAdapter-Unterobjekt, das ein Array beliebiger Objekte als Datenquelle verwendet.
3. CursorAdapter Ein abstraktes BaseAdapter-Kind, das verwendet wird, um Daten von android.database.Cursor an eine ListView zu übergeben.

Einfaches ListView Beispiel

Schauen wir uns ein einfaches ListView-Beispiel an, das die Anzeige einer Liste von Programmiersprachen behandelt.

Wenn der Benutzer auf ein einzelnes Element klickt, wird die angeklickte Sprache in einer Toast Nachricht angezeigt.

Beispiel 1: Android ListView - Fill With Array

Dies ist ein einfaches ListView-Tutorial, in dem wir Folgendes tun:

  • Füllen Sie ListView mit Daten aus einem einfachen Array.
  • Wir verwenden ArrayAdapter.
  • Handle ItemClicks.*

    Android ListView Array Demo #### Unsere MainActivity

Dies ist unsere Haupt-activity. Dies ist unsere Launcher-Aktivität. Diese Klasse wird der Einstiegspunkt in unsere Anwendung sein.

Zuerst definieren wir unser Paket und importieren dann andere Pakete über die import Anweisungen.

Dann lassen wir unsere Klasse von AppCompatActivity ableiten.

Wir werden ein Array verwalten, das als unsere Datenquelle dienen wird:

 String[] spacecrafts={"Juno","Hubble","Casini","WMAP","Spitzer","Pioneer","Columbia","Challenger","Apollo","Curiosity"};

Wir übergeben dieses Array in unseren Arrayadapetr-Konstruktor und setzen seine Instanz auf unseren ListView:

    ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,spacecrafts);
    lv.setAdapter(adapter);

Schauen wir uns den vollständigen Quellcode an.

public class MainActivity extends AppCompatActivity {

 ListView lv;
 String[] spacecrafts={"Juno","Hubble","Casini","WMAP","Spitzer","Pioneer","Columbia","Challenger","Apollo","Curiosity"};

 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    lv= (ListView) findViewById(R.id.lv);

    //ADAPTER
    ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,spacecrafts);
    lv.setAdapter(adapter);

     //LISTENER
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        Toast.makeText(MainActivity.this, spacecrafts[i], Toast.LENGTH_SHORT).show();
    }
    });

 }

}

Unser XML-Layout

Dies ist das Layout unserer Hauptaktivität. Es ist unsere activity_main.xml Datei.

Wir verwenden die folgenden Elemente:

  1. RelativeLayout - Unsere ViewGroup.
  2. ListView - Unser Adapterview.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_paddingBottom="@dimen/activity_vertical_margin"
    android_paddingLeft="@dimen/activity_horizontal_margin"
    android_paddingRight="@dimen/activity_horizontal_margin"
    android_paddingTop="@dimen/activity_vertical_margin"
    tools_context="com.tutorials.hp.listviewarray.MainActivity">

    <ListView
        android_id="@+id/lv"
        android_layout_width="match_parent"
        android_layout_height="wrap_content"
         />
</RelativeLayout>

How To Run

  1. Laden Sie das Projekt herunter.
  2. Sie erhalten eine gezippte Datei, entpacken Sie sie.
  3. Öffnen Sie das Android Studio.
  4. Schließen Sie nun das bereits geöffnete Projekt.
  5. Klicken Sie in der Menüleiste auf Datei >Neu> Projekt importieren.
  6. Wählen Sie nun einen Zielordner, aus dem Sie das Projekt importieren möchten.
  7. Wählen Sie ein Android-Projekt.
  8. Klicken Sie nun auf "OK".
  9. Fertig, Sie haben das Projekt importiert und können es nun bearbeiten.

Weitere Ressourcen

GitHub Durchsuchen Durchsuchen
GitHub Download Link Herunterladen

Beispiel 2: Wie man eine ListView aus einer ArrayList auffüllt

Dies ist ein einfaches ListView-Tutorial, in dem wir Folgendes tun:

  • Füllen der ListView mit Daten aus einer einfachen ArrayList.
  • Wir verwenden ArrayAdapter.
  • ItemClicks handhaben.

Unsere MainActivity

Dies ist unsere MainActivity Klasse.

public class MainActivity extends AppCompatActivity {

    ArrayList<String> numbers=new ArrayList<>();
    ListView lv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lv = (ListView) findViewById(R.id.lv);

        //FILL DATA
        fillData();

        //ADAPTER
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, numbers);
        lv.setAdapter(adapter);

        //LISTENER
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Toast.makeText(MainActivity.this, numbers.get(i), Toast.LENGTH_SHORT).show();
            }
        });
    }

    //FILL DATA
    private void fillData()
    {
        for (int i=0;i<10;i++)
        {
            numbers.add("Number "+String.valueOf(i));
        }
    }
}

Unser XML-Layout

Hier befindet sich das Layout unserer Aktivität.


Good day.

## Beispiel 2: Android Simple ListView OnItemClick

Dies ist ein einfaches Beispiel dafür, wie man eine [listview](/android/listview) mit einer Arrayliste von Strings füllt und unsere ListView itemClicks behandelt.

### Beispiel

###### MainActivity.java

Hier ist unsere Hauptaktivität.

Zuerst geben wir den Paketnamen an und fügen dann unsere Import-Anweisungen hinzu.

Dann erstellen wir unsere Klasse MainActivity, indem wir sie von AppCompatActivity ableiten.

Wir werden eine einfache ArrayList als Instanzfeld beibehalten, die unsere Daten enthält, die wir in unserer [listview](/android/listview) darstellen werden.

Wir werden ArrayAdapter als unseren Adapter verwenden.

Hier ist, wie wir se sein werden

<!-- 12 -->

```java

###### activity_main.xml

Hier ist das Layout unserer Hauptaktivität. Wir nennen es <code>activity_main.xml</code>.

Wir verwenden die folgenden Elemente:

1. [RelativeLayout](/android/relativelayout) - Unsere ViewGroup.
2. [ListView](/android/listview) - Unser Adapterview.

Die ListView wird unsere Daten rendern.

<!-- 13 -->

```xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_paddingBottom="@dimen/activity_vertical_margin"
    android_paddingLeft="@dimen/activity_horizontal_margin"
    android_paddingRight="@dimen/activity_horizontal_margin"
    android_paddingTop="@dimen/activity_vertical_margin"
    tools_context="com.tutorials.hp.simplelistview.MainActivity">

    <ListView
        android_id="@+id/lv"
        android_layout_width="match_parent"
        android_layout_height="wrap_content"
         />
</RelativeLayout>

ABSCHNITT 2 : Quellcode

Laden Sie den Quellcode unten herunter.

GitHub Browse Browse
GitHub Download Link Download

Beispiel 3: Wie man eine listView aus einer Liste von POJO-Objekten befüllt

Wie man eine einfache ListView mit einer java List von POJOs füllt.

In diesem Tutorial sehen wir, wie man eine einfache Listenansicht mit "Person"-Objekten füllt und beim Anklicken den Namen der Person in einer Toast-Nachricht anzeigt.

Konzepte, die Sie in diesem Beispiel lernen werden

  1. Was ist eine ListView?
  2. Was ist eine List Sammlung?
  3. Wie füllt man eine ListView aus einer List von POJO Objects Datenstruktur in android studio.
  4. Wie kann man einen einfachen Klick-Listener in einer Listenansicht erstellen.
  5. Was ist ein ArrayAdapter?
  6. Wie man einen ArrayAdapter benutzt, um eine Java-Liste an eine einfache Listenansicht zu binden.

Wie man ListView im XML-Layout definiert

Sie verwenden das ListView Objekt als Element:

    <ListView
        android_id="@+id/lv"
        android_layout_width="match_parent"
        android_layout_height="wrap_content"
         />

Wie man eine ListView in Java-Code referenziert

So referenzieren Sie eine ListView. Sie verwenden die Methode findViewById():

ListView lv= (ListView) findViewById(R.id.lv);

(a). Initialisierung einer Java-Liste

So können Sie eine Liste initialisieren. Man kann sie nicht direkt instanziieren, da es sich wie gesagt um eine Schnittstelle handelt:

    List<String> people=new ArrayList<>();

(b). Wie man eine Java-Liste löscht

Sie können alle Elemente in einer Java-Liste mit der Methode clear() löschen:

    people.clear();

(c). Auffüllen einer Java-Liste mit Objekten

Sie können eine Java-Liste mit Hilfe der Methode add() auffüllen:

    private void fillPeople()
    {
        Person p=new Person();
        p.setName("Mike");
        people.add(p.getName());

        p=new Person();
        p.setName("John");
        people.add(p.getName());
        .....

Lesen Sie mehr über java list hier.

Was ist ein ArrayAdapter?

Wir brauchen einen Adapter, um mit einer Listenansicht zu arbeiten.

Ein Adapter ist eine Klasse, die als Brücke zwischen einem Adapterview und der zugrunde liegenden Datenquelle fungiert.

In diesem Fall werden wir einen ArrayAdapter verwenden.

Sie können mehr über ArrayAdapter hier lesen.

1. Projekt Demo

Hier ist die Demo des Beispiels:

2. Android Studio und Projekt Ceation

(a). Was ist Android Studio?

Wir werden Android Studio verwenden, die offizielle IDE für die Android-Entwicklung. Android Studio wird sowohl von Google als auch von Jetbrains gepflegt.

Android Studio wird zusammen mit dem Android SDK Manager geliefert, einem Tool, mit dem wir die für die Entwicklung von Android-Anwendungen erforderlichen Android SDK-Komponenten herunterladen können.

Um mehr über Android Studio zu erfahren, besuchen Sie hier.

(b). Wie man eine leere Aktivität in Android Studio erstellt
  1. Erstellen Sie zunächst ein leeres Projekt in Android Studio. Gehen Sie zu Datei -> Neues Projekt.
  2. Geben Sie den Anwendungsnamen ein und wählen Sie den Firmennamen.
  3. Wählen Sie Minimum SDK.
  4. Wählen Sie Empty activity.
  5. Klicken Sie auf Fertigstellen.

Dies wird für uns ein Projekt mit dem folgenden generieren:

1. activity_main.xml XML Layout Wird in die MainActivity View aufgeblasen, hier fügen Sie Ihre Views und Widgets ein.
2. MainActivity.java Klasse Unser Launcher activity

Mehr darüber, wie man ein Android-Projekt in Android Studio erstellt, erfahren Sie hier.

(c). Generierte Projektstruktur in Android Stduo

Android Studio generiert für Sie ein Projekt mit Standardkonfigurationen über eine Reihe von Dateien und Verzeichnissen.

2. Ressourcen.

Die Android-Plattform bietet eine leistungsstarke und flexible Möglichkeit, statische Inhalte als Ressourcen hinzuzufügen.

Diese statischen Inhalte werden auch in die APK-Datei verpackt. Der statische Inhalt wird entweder als Ressource oder als Asset gespeichert.

Ressourcen gehören zu einem bestimmten Typ. Diese Typen können sein:

  1. Zeichnungsfähig.
  2. Layout.
  3. Wert.

Beginnen wir mit der Betrachtung der Layout-Ressourcen

(a). activity_main.xml

Dieses Layout wird in die Benutzeroberfläche der Hauptaktivität aufgeblasen. Dies geschieht über die Methode setContentView() der Activity, die es erfordert, dass wir ihr das Layout übergeben.

Wir werden dies innerhalb der onCreate() Methode von Activity tun.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_paddingBottom="@dimen/activity_vertical_margin"
    android_paddingLeft="@dimen/activity_horizontal_margin"
    android_paddingRight="@dimen/activity_horizontal_margin"
    android_paddingTop="@dimen/activity_vertical_margin"
    tools_context="com.tutorials.hp.listviewandobjects.MainActivity">

    <ListView
        android_id="@+id/lv"
        android_layout_width="match_parent"
        android_layout_height="wrap_content"
         />
</RelativeLayout>

3. Java-Code.

Android-Apps können hauptsächlich in Java oder Kotlin geschrieben werden. Heutzutage gibt es jedoch viele Frameworks wie Flutter, die auch Sprachen wie Dart verwenden.

In diesem Kurs verwenden wir die Programmiersprache Java.

Wir werden diese Klassen in unserem Projekt verwenden.

(a). Person.java

Dies ist unser Datenobjekt. Diese Klasse wird eine einzelne Person darstellen.

Eine einzelne Person hat die folgenden Eigenschaften:

  1. id - eine Ganzzahl. Die ID der Person.
  2. Name - Der Name der Person. Ein String.

Dann wird unsere Liste aus Person Objekten bestehen.


public class Person {

    int id;
    String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
(b). MainActivity.java

Dies ist, wie der Name schon sagt, unsere Startaktivität. Das bedeutet, dass sie der Haupteinstiegspunkt zu unserer App sein wird, denn wenn der Benutzer auf das Symbol für unsere App klickt, wird diese Aktivität zuerst gerendert.

Wir überschreiben eine Methode namens onCreate(). Hier beginnen wir mit dem Aufblasen unseres Hauptlayouts über die Methode setContentView().

Unsere Hauptaktivität ist eigentlich eine activity, da sie von der AppCompatActivity abgeleitet ist.

public class MainActivity extends AppCompatActivity {

    List<String> people=new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //LISTVIEW
        ListView lv= (ListView) findViewById(R.id.lv);

        //FILL LIST
        fillPeople();

        //ADAPTER
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,people);
        lv.setAdapter(adapter);

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Toast.makeText(MainActivity.this, people.get(i), Toast.LENGTH_SHORT).show();

            }
        });
    }

    private void fillPeople()
    {
        people.clear();
        Person p=new Person();
        p.setName("Mike");
        people.add(p.getName());

        p=new Person();
        p.setName("John");
        people.add(p.getName());

        p=new Person();
        p.setName("Lucy");
        people.add(p.getName());

        p=new Person();
        p.setName("Rebecca");
        people.add(p.getName());

        p=new Person();
        p.setName("Kris");
        people.add(p.getName());

        p=new Person();
        p.setName("Kurt");
        people.add(p.getName());

        p=new Person();
        p.setName("Vin");
        people.add(p.getName());
    }
}

4. Download

Alles ist in der Quellcode-Referenz enthalten. Er ist gut kommentiert und leicht zu verstehen und kann unten heruntergeladen werden.

Schauen Sie sich auch unser Video-Tutorial an, es ist ausführlicher und wird Schritt für Schritt erklärt.

1. GitHub Direkter Download
2. GitHub Durchsuchen
3. YouTube Unser YouTube-Kanal

Beispiel 4: ListView - Wie man auf LongClick-Ereignisse hört

In diesem Android-Tutorial wird gezeigt, wie man LongClick-Ereignisse in einer benutzerdefinierten Listenansicht mit Bildern und Text behandelt.

Los geht's.

1. Basic Activity Projekt erstellen

  1. Erstellen Sie zunächst ein neues Projekt in android studio. Gehen Sie zu Datei -> Neues Projekt.
  2. Geben Sie den Anwendungsnamen ein und wählen Sie den Firmennamen.
    Neues Projekt Dialog
  3. Wählen Sie das minimale SDK.
    Minimales SDK auswählen
  4. Wählen Sie eine Basisaktivität.
    Leere Aktivität wählen
  5. Klicken Sie auf Fertigstellen.
    Fertigstellen

Die Basisaktivität hat bereits eine Symbolleiste und eine schwebende Aktionsschaltfläche im Layout hinzugefügt

2. Abhängigkeiten

Wir haben eigentlich keine externen Abhängigkeiten. Stattdessen geben wir einfach ein paar Abhängigkeiten von Support-Bibliotheken an.

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    testImplementation 'junit:junit:4.12'
    implementation `com.android.support:appcompat-v7:23.2.1'
    implementation `com.android.support:design:23.2.1'
    implementation `com.android.support:cardview-v7:23.2.1'
}

3. Benutzeroberfläche erstellen

Benutzeroberflächen werden in Android typischerweise mit XML-Layouts erstellt, im Gegensatz zu direkter Java-Codierung.

(a). activity_main.xml
  • Dieses Layout wird zur MainActivity-Benutzeroberfläche aufgeblasen.
  • Es enthält die Datei content_main.xml.

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_fitsSystemWindows="true"
    tools_context="com.tutorials.hp.listviewlongclick.MainActivity">

    <android.support.design.widget.AppBarLayout
        android_layout_width="match_parent"
        android_layout_height="wrap_content"
        android_theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android_id="@+id/toolbar"
            android_layout_width="match_parent"
            android_layout_height="?attr/actionBarSize"
            android_background="?attr/colorPrimary"
            app_popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_main" />

    <android.support.design.widget.FloatingActionButton
        android_id="@+id/fab"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_gravity="bottom|end"
        android_layout_margin="@dimen/fab_margin"
        android_src="@android:drawable/ic_dialog_email" />

</android.support.design.widget.CoordinatorLayout>
(b). content_main.xml

Fügen wir hier unsere ListView hinzu.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_paddingBottom="@dimen/activity_vertical_margin"
    android_paddingLeft="@dimen/activity_horizontal_margin"
    android_paddingRight="@dimen/activity_horizontal_margin"
    android_paddingTop="@dimen/activity_vertical_margin"
    app_layout_behavior="@string/appbar_scrolling_view_behavior"
    tools_context="com.tutorials.hp.listviewlongclick.MainActivity"
    tools_showIn="@layout/activity_main">

    <ListView
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_id="@+id/lv"
        android_layout_alignParentLeft="true"
        android_layout_alignParentStart="true" />
</RelativeLayout>
(c). model.xml

Dieses Layout wird das benutzerdefinierte Zeilenmodell für unsere ListView definieren.

In diesem Fall wird unser ListView Bilder und Text enthalten.

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    android_orientation="horizontal" android_layout_width="match_parent"

    android_layout_margin="10dp"
    card_view_cardCornerRadius="10dp"
    card_view_cardElevation="10dp"

    android_layout_height="wrap_content">

    <RelativeLayout
        android_layout_width="match_parent"
        android_layout_height="match_parent">

        <ImageView
            android_layout_width="wrap_content"
            android_layout_height="wrap_content"
            android_id="@+id/movieImage"
            android_padding="10dp"
            android_src="@drawable/ghost" />

        <TextView
            android_layout_width="wrap_content"
            android_layout_height="wrap_content"
            android_textAppearance="?android:attr/textAppearanceLarge"
            android_text="Name"
            android_id="@+id/nameTxt"
            android_padding="10dp"
            android_textColor="@color/colorAccent"
            android_layout_below="@+id/movieImage"
            android_layout_alignParentLeft="true"
             />

        <TextView
            android_layout_width="wrap_content"
            android_layout_height="wrap_content"
            android_textAppearance="?android:attr/textAppearanceLarge"
            android_text=" John Doe a former FBI Agent and now Physics teacher .is wrongly accussed of murdering an innocent child.He makes it his business to find the bad guys who did taht.He convinces hacker Aram to join him.....
            "
            android_id="@+id/descTxt"
            android_padding="10dp"
            android_layout_below="@+id/nameTxt"
            android_layout_alignParentLeft="true"
            />

        <TextView
            android_layout_width="wrap_content"
            android_layout_height="wrap_content"
            android_textAppearance="?android:attr/textAppearanceMedium"
            android_text="TV Show"
            android_id="@+id/posTxt"
            android_padding="10dp"

            android_layout_below="@+id/movieImage"
            android_layout_alignParentRight="true" />

        <CheckBox
            android_layout_width="wrap_content"
            android_layout_height="wrap_content"
            android_id="@+id/chk"
            android_layout_alignParentRight="true"
            />

    </RelativeLayout>
</android.support.v7.widget.CardView>

Kommen wir nun zu unseren Java-Klassen:

4. Film.java

Unser Datenobjekt. Wird einen einzelnen Film darstellen.

package com.tutorials.hp.listviewlongclick;

public class Movie {

    private String name;
    private int image;

    public Movie(String name, int image) {
        this.name = name;
        this.image = image;
    }

    public String getName() {
        return name;
    }

    public int getImage() {
        return image;
    }
}

5. ItemLongClickListener.java

Unsere Schnittstelle für den langen Klick-Listener.


public interface ItemLongClickListener {

    void onLongItemClick(View v);

}

6. MyViewHolder.java

Wird unsere Widgets enthalten, die wiederverwendet werden sollen.


public class MyViewHolder implements View.OnLongClickListener {

    ImageView img;
    TextView nameTxt;
    ItemLongClickListener itemLongClickListener;

    public MyViewHolder(View v) {
        img= (ImageView) v.findViewById(R.id.movieImage);
        nameTxt= (TextView) v.findViewById(R.id.nameTxt);

        v.setOnLongClickListener(this);

    }

    public void setItemLongClickListener(ItemLongClickListener ic)
    {
        this.itemLongClickListener=ic;
    }

    @Override
    public boolean onLongClick(View v) {
        this.itemLongClickListener.onLongItemClick(v);
        return false;
    }
}

7. CustomAdapter.java

Wird unser model.xml aufblasen und Daten an die resultierenden Ansichten binden.

public class CustomAdapter extends BaseAdapter {

    Context c;
    ArrayList<Movie> movies;
    LayoutInflater inflater;

    public CustomAdapter(Context c, ArrayList<Movie> movies) {
        this.c = c;
        this.movies = movies;
    }

    @Override
    public int getCount() {
        return movies.size();
    }

    @Override
    public Object getItem(int position) {
        return movies.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    //SHALL RETURN A ROW
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        if(inflater==null)
        {
            inflater= (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        //CONVERT FROM XML TO JAVA
        if(convertView==null)
        {
            convertView=inflater.inflate(R.layout.model,parent,false);
        }

        //BIND DATA TO VIEWS
        MyViewHolder holder=new MyViewHolder(convertView);
        holder.nameTxt.setText(movies.get(position).getName());
        holder.img.setImageResource(movies.get(position).getImage());

        holder.setItemLongClickListener(new ItemLongClickListener() {
            @Override
            public void onLongItemClick(View v) {
                Toast.makeText(c,movies.get(position).getName(),Toast.LENGTH_SHORT).show();
            }
        });

        return convertView;
    }
}

8. MainActivity.java

Unsere Hauptaktivität.

public class MainActivity extends AppCompatActivity {

    ListView lv;
    CustomAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

        lv= (ListView) findViewById(R.id.lv);
        adapter=new CustomAdapter(this,getMovies());

        //SET ADAPTER
        lv.setAdapter(adapter);

    }

    private ArrayList<Movie> getMovies() {

        //COLECTION OF CRIME MOVIES
        ArrayList<Movie> movies=new ArrayList<>();

        Movie movie=new Movie("Shuttle Carrier",R.drawable.shuttlecarrier);

        //ADD ITR TO COLLECTION
        movies.add(movie);

        movie=new Movie("Fruts",R.drawable.fruits);
        movies.add(movie);

        movie=new Movie("Breaking Bad",R.drawable.breaking);
        movies.add(movie);

        movie=new Movie("Crisis",R.drawable.crisis);
        movies.add(movie);

        movie=new Movie("Ghost Rider",R.drawable.rider);
        movies.add(movie);

        movie=new Movie("Star Wars",R.drawable.starwars);
        movies.add(movie);

        movie=new Movie("BlackList",R.drawable.red);
        movies.add(movie);

        movie=new Movie("Men In Black",R.drawable.meninblack);
        movies.add(movie);

        movie=new Movie("Game Of Thrones",R.drawable.thrones);
        movies.add(movie);

        return movies;
    }

}

Code herunterladen

GitHub Browse Download

Example 4: Android Custom ListView Master Detail [Open new Activity]

Hallo Leute. Heute besprechen wir die Android Custom ListView Master Detail Schnittstelle.

Unsere ListView soll Bilder und Text enthalten.

SECTION 1 : Unsere MainActivity

Dies ist unsere Haupt-Aktivität.

Sie ist unsere Hauptansicht.

Die Hauptansicht wird eine ListView mit Player-Objekten anzeigen.

public class MainActivity extends Activity {

  ListView lv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lv=(ListView) findViewById(R.id.listView1);

        //ADAPTER
        CustomAdapter adapter=new CustomAdapter(this);
        lv.setAdapter(adapter);

        //EVENTS
        lv.setOnItemClickListener(new OnItemClickListener() {

      @Override
      public void onItemClick(AdapterView<?> arg0, View v, int pos,
          long id) {
        // TODO Auto-generated method stub

        Intent i=new Intent(getApplicationContext(), PlayerActivity.class);

        //PASS INDEX OR POS
        i.putExtra("Position", pos);
        startActivity(i);

      }
    });

    }

ABSCHNITT 2 : Unsere DetailActivity

Dies ist unsere Detail activity.

Diese Klasse wird die Details eines einzelnen Player-Objekts anzeigen.


public class PlayerActivity extends Activity {

  int pos=0;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_player);

    //GET PASSED DATA
    Intent i=getIntent();
    pos=i.getExtras().getInt("Position");

    //GET VIEWS
    final CustomAdapter adapter=new CustomAdapter(this);
    final ImageView img=(ImageView) findViewById(R.id.imageView1);
     final TextView nameTv=(TextView)findViewById(R.id.nameTxt);
     final TextView goalTv=(TextView) findViewById(R.id.goalTxt);

     //SET DATA
     img.setImageResource(adapter.images[pos]);
     nameTv.setText(adapter.names[pos]);
     goalTv.setText(adapter.goals[pos]);

     Button nextBtn=(Button) findViewById(R.id.button1);
     //NEXT CLICKED
     nextBtn.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View arg0) {
        // TODO Auto-generated method stub

        int position=pos+1;

        //set data
        img.setImageResource(adapter.images[position]);
         nameTv.setText("Name: "+adapter.names[position]);
         goalTv.setText("Goals: "+adapter.goals[position]);

         if(!(position>=adapter.getCount()-1))
         {
           pos +=1;
         }else
         {
           pos = -1;
         }

      }
    });

  }

}

ABSCHNITT 3 : Unser CustomAdapter:

Dies ist unsere Adapterklasse.

Diese Klasse wird von der Klasse android.widget.BaseAdapter abgeleitet.

Als Adapter wird sie dafür verantwortlich sein, zuerst unser model.xml in ein View-Objekt aufzublasen. Dann wird sie Daten an diese aufgeblähte Ansicht binden.

Wir werden auch auf Klick-Ereignisse für diese Ansicht hören und dann das Detail activity öffnen.

public class CustomAdapter extends BaseAdapter {

  private Context c;

  String[] names={"Michael Carrick","Diego Costa","Ander Herera","Juan Mata","Oscar","Aaron Ramsey","Wayne Rooney","Alexis Sanchez","Van Persie"};
    String[] goals={"3","25","9","11","9","11","14","18","13"};
    int[] images={R.drawable.carrick,R.drawable.costa,R.drawable.herera,R.drawable.mata,R.drawable.oscar,R.drawable.ramsey,R.drawable.rooney,R.drawable.sanchez,R.drawable.vanpersie};

;   public CustomAdapter(Context ctx) {
    // TODO Auto-generated constructor stub

    this.c=ctx;
  }

  @Override
  public int getCount() {
    // TODO Auto-generated method stub
    return names.length;
  }

  @Override
  public Object getItem(int pos) {
    // TODO Auto-generated method stub
    return names[pos];
  }

  @Override
  public long getItemId(int pos) {
    // TODO Auto-generated method stub
    return pos;
  }

  @Override
  public View getView(int pos, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    if(convertView==null)
    {
      LayoutInflater inflater=(LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView=inflater.inflate(R.layout.player, null);
    }

    //GET VIEWS
    TextView nameTxt=(TextView) convertView.findViewById(R.id.nameTv);
        TextView goalsTxt=(TextView) convertView.findViewById(R.id.goalsTv);
        ImageView img=(ImageView) convertView.findViewById(R.id.imageView1);

        //SET DATA
        nameTxt.setText(names[pos]);
        goalsTxt.setText(goals[pos]);
        img.setImageResource(images[pos]);

    return convertView;
  }

}

ABSCHNITT 4: Unser MainActivity-Layout

Dieses Layout wird in die Benutzeroberfläche für unsere Hauptaktivität aufgeblasen.

Dieses Layout wird eine ListView enthalten.

<RelativeLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_paddingBottom="@dimen/activity_vertical_margin"
    android_paddingLeft="@dimen/activity_horizontal_margin"
    android_paddingRight="@dimen/activity_horizontal_margin"
    android_paddingTop="@dimen/activity_vertical_margin"
    tools_context=".MainActivity" >

    <ListView
        android_id="@+id/listView1"
        android_layout_width="match_parent"
        android_layout_height="wrap_content"
        android_layout_alignParentLeft="true"
        android_layout_alignParentTop="true" >

    </ListView>

</RelativeLayout>

ABSCHNITT 5: Unser DetailActivity-Layout

Dies ist unser Detail activity Layout. Es wird eine Bildansicht, eine Textansicht und eine Schaltfläche enthalten.

<RelativeLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_paddingBottom="@dimen/activity_vertical_margin"
    android_paddingLeft="@dimen/activity_horizontal_margin"
    android_paddingRight="@dimen/activity_horizontal_margin"
    android_paddingTop="@dimen/activity_vertical_margin"
    tools_context=".PlayerActivity" >

    <ImageView
        android_id="@+id/imageView1"
        android_layout_width="190dp"
        android_layout_height="275dp"
        android_layout_alignParentTop="true"
        android_scaleType="fitCenter"
        android_src="@drawable/carrick" />

    <Button
        android_id="@+id/button1"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_alignParentBottom="true"
        android_layout_alignParentRight="true"
        android_text="Next" />

    <TextView
        android_id="@+id/goalTxt"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_alignParentLeft="true"
        android_layout_below="@+id/nameTxt"
        android_layout_marginTop="24dp"
        android_text="Goals : "
        android_textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android_id="@+id/textView1"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_alignParentLeft="true"
        android_layout_below="@+id/imageView1"
        android_text="PLAYER PROFILE"
        android_textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android_id="@+id/nameTxt"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_alignParentLeft="true"
        android_layout_below="@+id/textView1"
        android_layout_marginTop="17dp"
        android_text="Name"
        android_textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

ABSCHNITT 6: Unser RowModel-Layout

Dies ist unser benutzerdefiniertes Listview-Zeilenmodell.
Es definiert, wie jede Listview-Zeile erscheinen wird.
In diesem Fall haben wir eine Bildansicht und zwei Textansichten.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_orientation="horizontal" >

    <TextView
        android_id="@+id/nameTv"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_alignParentTop="true"
        android_layout_marginLeft="28dp"
        android_layout_toRightOf="@+id/imageView1"
        android_text="Name"
        android_textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android_id="@+id/goalsTv"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_alignBottom="@+id/imageView1"
        android_layout_alignLeft="@+id/nameTv"
        android_layout_marginBottom="16dp"
        android_text="Goals"
        android_textAppearance="?android:attr/textAppearanceSmall" />

    <ImageView
        android_id="@+id/imageView1"
        android_layout_width="65dp"
        android_layout_height="71dp"
        android_layout_alignParentLeft="true"
        android_layout_alignParentTop="true"
        android_layout_marginLeft="26dp"
        android_padding="10dp"
        android_src="@drawable/herera" />

</RelativeLayout>

ABSCHNITT 7 : Unser Manifest

Dies ist unser android mainfest. Stellen Sie einfach sicher, dass unsere beiden Aktivitäten registriert sind.

<?xml version="1.0" encoding="utf-8"?>
<manifest
    package="com.example.listviewmasterdetail"
    android_versionCode="1"
    android_versionName="1.0" >

    <uses-sdk
        android_minSdkVersion="19"
        android_targetSdkVersion="19" />

    <application
        android_allowBackup="true"
        android_icon="@drawable/ic_launcher"
        android_label="@string/app_name"
        android_theme="@style/AppTheme" >
        <activity
            android_name="com.example.listviewmasterdetail.MainActivity"
            android_label="@string/app_name" >
            <intent-filter>
                <action android_name="android.intent.action.MAIN" />

                <category android_name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android_name="com.example.listviewmasterdetail.PlayerActivity"
            android_label="@string/title_activity_player" >
        </activity>
    </application>

</manifest>

Beispiel 5: Android ListView - CRUD - ADD UPDATE DELETE.

Hallo. Wir sehen, wie man grundlegende CRUD-Operationen mit einer Array-Liste und einem ListView durchführt.

  • Hinzufügen, Aktualisieren und Löschen gegen eine ArrayList und eine ListView.
  • Wir arbeiten mit ArrayAdapter.
  • behandeln ItemClicks und Eingabedaten aus einem Dialog.

    Android ListView CRUD #### 1. Build.Gradle App Ebene

  • Fügen Sie Abhängigkeiten für AppCompat und Design Support Bibliotheken hinzu.
  • Unsere MainActivity soll von AppCompatActivity abgeleitet werden, während wir auch den Floating Action Button aus den Design Support Bibliotheken verwenden werden.

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.1"

    defaultConfig {
        applicationId "com.tutorials.hp.listview_crud"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    testImplementation 'junit:junit:4.12'
    implementation `com.android.support:appcompat-v7:24.1.1'
    implementation `com.android.support:design:24.1.1'
}

2. CRUD.java

  • Hinzufügen Aktualisieren Löschen von Daten. Verantwortlich für die Durchführung von CRUD-Operationen.


public class CRUD {

    private ArrayList<String> names =new ArrayList<>();

    public void save(String name)
    {
       names.add(name);
    }

    public ArrayList<String> getNames()
    {

        return names;
    }

    public Boolean update(int position,String newName)
    {
       try {
           names.remove(position);
           names.add(position,newName);

           return true;
       }catch (Exception e)
       {
           e.printStackTrace();
          return false;
        }
    }

    public Boolean delete(int position)
    {
        try {
            names.remove(position);

            return true;
        }catch (Exception e)
        {
            e.printStackTrace();
            return false;

        }
    }
}

3. MainActivity.java

  • Launcher-Aktivität.
  • ActivityMain.xml wird als Inhaltsansicht für diese Aktivität aufgeblasen.
  • Verweist auf unsere ListView.

public class MainActivity extends AppCompatActivity {

    ListView lv;
    ArrayAdapter<String> adapter;
    CRUD crud=new CRUD();
    Dialog d;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        lv= (ListView) findViewById(R.id.lv);

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                if(d != null) {
                    if(!d.isShowing())
                    {
                        displayInputDialog(i);
                    }else
                    {
                        d.dismiss();
                    }
                }
            }
        });

        final FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                displayInputDialog(-1);
            }
        });
    }
    private void displayInputDialog(final int pos)
    {
        d=new Dialog(this);
        d.setTitle("LISTVIEW CRUD");
        d.setContentView(R.layout.input_dialog);

        final EditText nameEditTxt= (EditText) d.findViewById(R.id.nameEditText);
        Button addBtn= (Button) d.findViewById(R.id.addBtn);
        Button updateBtn= (Button) d.findViewById(R.id.updateBtn);
        Button deleteBtn= (Button) d.findViewById(R.id.deleteBtn);

        if(pos== -1)
        {
            addBtn.setEnabled(true);
            updateBtn.setEnabled(false);
            deleteBtn.setEnabled(false);
        }else
        {
            addBtn.setEnabled(true);
            updateBtn.setEnabled(true);
            deleteBtn.setEnabled(true);
            nameEditTxt.setText(crud.getNames().get(pos));
        }

        addBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //GET DATA
                String name=nameEditTxt.getText().toString();

                //VALIDATE
                if(name.length()>0 && name != null)
                {
                    //save
                    crud.save(name);
                    nameEditTxt.setText("");
                    adapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,crud.getNames());
                    lv.setAdapter(adapter);

                }else
                {
                    Toast.makeText(MainActivity.this, "Name cannot be empty", Toast.LENGTH_SHORT).show();
                }
            }
        });
        updateBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //GET DATA
                String newName=nameEditTxt.getText().toString();

                //VALIDATE
                if(newName.length()>0 && newName != null)
                {
                    //save
                    if(crud.update(pos,newName))
                    {
                        nameEditTxt.setText(newName);
                        adapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,crud.getNames());
                        lv.setAdapter(adapter);
                    }

                }else
                {
                    Toast.makeText(MainActivity.this, "Name cannot be empty", Toast.LENGTH_SHORT).show();
                }
            }
        });
        deleteBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //DELETE
                if( crud.delete(pos))
                {
                    nameEditTxt.setText("");
                    adapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,crud.getNames());
                    lv.setAdapter(adapter);
                }
            }
        });

        d.show();
    }
}

4. ActivityMain.xml

  • Soll unsere ContentMain.xml enthalten.

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_fitsSystemWindows="true"
    tools_context="com.tutorials.hp.listview_crud.MainActivity">

    <android.support.design.widget.AppBarLayout
        android_layout_width="match_parent"
        android_layout_height="wrap_content"
        android_theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android_id="@+id/toolbar"
            android_layout_width="match_parent"
            android_layout_height="?attr/actionBarSize"
            android_background="?attr/colorPrimary"
            app_popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_main" />

    <android.support.design.widget.FloatingActionButton
        android_id="@+id/fab"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_gravity="bottom|end"
        android_layout_margin="@dimen/fab_margin"
        android_src="@android:drawable/ic_dialog_email" />

</android.support.design.widget.CoordinatorLayout>

5. ContentMain.xml

  • Um unsere ListView zu enthalten.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_paddingBottom="@dimen/activity_vertical_margin"
    android_paddingLeft="@dimen/activity_horizontal_margin"
    android_paddingRight="@dimen/activity_horizontal_margin"
    android_paddingTop="@dimen/activity_vertical_margin"
    app_layout_behavior="@string/appbar_scrolling_view_behavior"
    tools_context="com.tutorials.hp.listview_crud.MainActivity"
    tools_showIn="@layout/activity_main">

    <ListView
        android_id="@+id/lv"
        android_layout_width="match_parent"
        android_layout_height="wrap_content"
         />
</RelativeLayout>

6. inputdialog.xml

  • verarbeitet Eingaben.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android_orientation="vertical" android_layout_width="match_parent"
    android_layout_height="match_parent">

    <LinearLayout
        android_layout_width="fill_parent"
        android_layout_height="match_parent"
        android_layout_marginTop="?attr/actionBarSize"
        android_orientation="vertical"
        android_paddingLeft="15dp"
        android_paddingRight="15dp"
        android_paddingTop="10dp">

        <android.support.design.widget.TextInputLayout
            android_id="@+id/nameLayout"
            android_layout_width="match_parent"
            android_layout_height="wrap_content">

            <EditText
                android_id="@+id/nameEditText"
                android_layout_width="match_parent"
                android_layout_height="wrap_content"
                android_singleLine="true"
                android_hint= "Name" />
        </android.support.design.widget.TextInputLayout>

<LinearLayout
    android_orientation="horizontal"
    android_layout_width="match_parent"
    android_layout_height="wrap_content">
    <Button android_id="@+id/addBtn"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_text="ADD"
        android_clickable="true"
        android_background="@color/colorAccent"
        android_layout_marginTop="20dp"
        android_textColor="@android:color/white"/>

    <Button android_id="@+id/updateBtn"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_text="UPDATE"
        android_clickable="true"
        android_background="#009968"
        android_layout_marginTop="20dp"
        android_textColor="@android:color/white"/>

    <Button android_id="@+id/deleteBtn"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_text="DELETE"
        android_clickable="true"
        android_background="#2fc1b9"
        android_layout_marginTop="20dp"
        android_textColor="@android:color/white"/>
</LinearLayout>
         </LinearLayout>

</LinearLayout>

Wie wird ausgeführt?

  1. Laden Sie das Projekt herunter.
  2. Sie erhalten eine gezippte Datei, entpacken Sie sie.
  3. Öffnen Sie das Android Studio.
  4. Schließen Sie nun das bereits geöffnete Projekt.
  5. Klicken Sie in der Menüleiste auf Datei >Neu> Projekt importieren.
  6. Wählen Sie nun einen Zielordner, aus dem Sie das Projekt importieren möchten.
  7. Wählen Sie ein Android-Projekt.
  8. Klicken Sie nun auf "OK".
  9. Fertig, Sie haben das Projekt importiert und können es nun bearbeiten.

Weitere Ressourcen

GitHub Durchsuchen Durchsuchen
GitHub Download Link Herunterladen

Guten Tag!

Beispiel: Android ListView - ContextMenu

Android Custom ListView mit Bildern Text und ContextMenu tutorial.

Die ListView wird eine Liste von Elementen haben. Der Benutzer kann dann mit der rechten Maustaste auf ein bestimmtes Element klicken und ein Kontextmenü wird angezeigt.

Konzepte, die Sie in diesem Beispiel lernen werden

  1. Was ist eine ListView?
  2. Was ist ein ContextMenu?
  3. Wie erstellt man eine benutzerdefinierte Listenansicht mit Bildern, Text und Kontextmenü in android studio.
  4. Wie man einen Longclick-Listener in einer Listenansicht implementiert.
  5. Wie man ein Kontextmenü mit Menüpunkten anzeigt, wenn man mit der rechten Maustaste auf eine Listenansicht klickt.
  6. Wie man einen eigenen Adapter mit baseadapter erstellt.

Was ist BaseAdapter?

Wir brauchen einen Adapter um mit einer Listenansicht zu arbeiten.

Ein Adapter ist eine Klasse die als Brücke zwischen einem Adapterview und der zugrunde liegenden Datenquelle fungiert.

In diesem Fall werden wir BaseAdapter verwenden.

1. Gradle Dateien

Zuerst fügen wir Abhängigkeiten in der app level build.gradle Datei hinzu.

(a). Build.gradle

Lassen Sie uns einige Abhängigkeiten hinzufügen. Unser ListView wird aus Cardviews bestehen:

    apply plugin: 'com.android.application'

    android {
        compileSdkVersion 23
        buildToolsVersion "23.0.2"

        defaultConfig {
            applicationId "com.tutorials.hp.listviewcontextmenu"
            minSdkVersion 15
            targetSdkVersion 23
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }

    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        testImplementation 'junit:junit:4.12'
        implementation `com.android.support:appcompat-v7:23.2.1'
        implementation `com.android.support:design:23.2.1'
        implementation `com.android.support:cardview-v7:23.2.1'
    }

2. Layout-Dateien

Schauen wir uns unsere Layoutdateien an. Wir werden drei davon haben:

  1. activity_main.xml
  2. content_main.xml
  3. model.xml
(a). activity_main.xml
  • Unser Vorlagenlayout für die Hauptaktivität.
  • Es wird in die Ansicht für die Hauptaktivität aufgeblasen.
  • Sie wird die content_main.xml enthalten.

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout

        android_layout_width="match_parent"
        android_layout_height="match_parent"
        android_fitsSystemWindows="true"
        tools_context="com.tutorials.hp.listviewcontextmenu.MainActivity">

        <android.support.design.widget.AppBarLayout
            android_layout_width="match_parent"
            android_layout_height="wrap_content"
            android_theme="@style/AppTheme.AppBarOverlay">

            <android.support.v7.widget.Toolbar
                android_id="@+id/toolbar"
                android_layout_width="match_parent"
                android_layout_height="?attr/actionBarSize"
                android_background="?attr/colorPrimary"
                app_popupTheme="@style/AppTheme.PopupOverlay" />

        </android.support.design.widget.AppBarLayout>

        <include layout="@layout/content_main" />

        <android.support.design.widget.FloatingActionButton
            android_id="@+id/fab"
            android_layout_width="wrap_content"
            android_layout_height="wrap_content"
            android_layout_gravity="bottom|end"
            android_layout_margin="@dimen/fab_margin"
            android_src="@android:drawable/ic_dialog_email" />

    </android.support.design.widget.CoordinatorLayout>
(b). content_main.xml
  • Dies wird unsere ListView enthalten.
  • Sie wird in der activity_main.xml enthalten sein.

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout

        android_layout_width="match_parent"
        android_layout_height="match_parent"
        android_paddingBottom="@dimen/activity_vertical_margin"
        android_paddingLeft="@dimen/activity_horizontal_margin"
        android_paddingRight="@dimen/activity_horizontal_margin"
        android_paddingTop="@dimen/activity_vertical_margin"
        app_layout_behavior="@string/appbar_scrolling_view_behavior"
        tools_context="com.tutorials.hp.listviewcontextmenu.MainActivity"
        tools_showIn="@layout/activity_main">

        <ListView
            android_layout_width="wrap_content"
            android_layout_height="wrap_content"
            android_id="@+id/lv"

            android_layout_alignParentLeft="true"
            android_layout_alignParentStart="true" />
    </RelativeLayout>
(c). model.xml
  • Ist unser benutzerdefiniertes Listview-Zeilenlayout.
  • Wird zu einer einzigen Zeile aufgeblasen.
  • Enthält eine Kartenansicht mit Bildern und Text.

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v7.widget.CardView
        android_orientation="horizontal" android_layout_width="match_parent"

        android_layout_margin="10dp"
        card_view_cardCornerRadius="10dp"
        card_view_cardElevation="10dp"

        android_layout_height="wrap_content">

        <RelativeLayout
            android_layout_width="match_parent"
            android_layout_height="match_parent">

            <ImageView
                android_layout_width="wrap_content"
                android_layout_height="wrap_content"
                android_id="@+id/movieImage"
                android_padding="10dp"
                android_src="@drawable/ghost" />

            <TextView
                android_layout_width="wrap_content"
                android_layout_height="wrap_content"
                android_textAppearance="?android:attr/textAppearanceLarge"
                android_text="Name"
                android_id="@+id/nameTxt"
                android_padding="10dp"
                android_textColor="@color/colorAccent"
                android_layout_below="@+id/movieImage"
                android_layout_alignParentLeft="true"
                 />

            <TextView
                android_layout_width="wrap_content"
                android_layout_height="wrap_content"
                android_textAppearance="?android:attr/textAppearanceLarge"
                android_text=" John Doe a former FBI Agent and now Physics teacher .is wrongly accussed of murdering an innocent child.He makes it his business to find the bad guys who did taht.He convinces hacker Aram to join him.....
                "
                android_id="@+id/descTxt"
                android_padding="10dp"
                android_layout_below="@+id/nameTxt"
                android_layout_alignParentLeft="true"
                />

            <TextView
                android_layout_width="wrap_content"
                android_layout_height="wrap_content"
                android_textAppearance="?android:attr/textAppearanceMedium"
                android_text="TV Show"
                android_id="@+id/posTxt"
                android_padding="10dp"

                android_layout_below="@+id/movieImage"
                android_layout_alignParentRight="true" />

            <CheckBox
                android_layout_width="wrap_content"
                android_layout_height="wrap_content"
                android_id="@+id/chk"
                android_layout_alignParentRight="true"
                />

        </RelativeLayout>
    </android.support.v7.widget.CardView>

3. Java-Klassen

Wir verwenden die Programmiersprache Java.

Wir werden 5 Klassen haben:

(a). Film.java
  • Ist unser Datenobjekt, eine POJO-Klasse.
  • Stellt ein einzelnes Filmobjekt mit verschiedenen Eigenschaften dar.
  • Jede CardView wird einen Film enthalten.

    public class Movie {

        private String name;
        private int image;

        public Movie(String name, int image) {
            this.name = name;
            this.image = image;
        }

        public String getName() {
            return name;
        }

        public int getImage() {
            return image;
        }
    }
(b). LongClickListener
  • Ist eine Schnittstelle.
  • Enthält die Signatur für unseren LongClick-Listener.

    public interface LongClickListener {
        void onItemLongClick();
    }
(c). MyViewHolder.java
  • Unsere ViewHolder-Klasse.
  • Wird Ansichten enthalten, die wiederverwendet werden sollen.
  • Wird View.OnLongClickListener und View.OnCreateContextMenuListener implementieren.

    public class MyViewHolder implements View.OnLongClickListener,View.OnCreateContextMenuListener {

        ImageView img;
        TextView nameTxt;
        LongClickListener longClickListener;

        public MyViewHolder(View v) {
            img= (ImageView) v.findViewById(R.id.movieImage);
            nameTxt= (TextView) v.findViewById(R.id.nameTxt);

            v.setOnLongClickListener(this);
            v.setOnCreateContextMenuListener(this);
        }

        public void setLongClickListener(LongClickListener lc)
        {
            this.longClickListener=lc;
        }

        @Override
        public boolean onLongClick(View v) {
            this.longClickListener.onItemLongClick();
            return false;
        }

        @Override
        public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
            menu.add(0,0,0,"Share");
            menu.add(0,1,0,"Rate");
            menu.add(0,2,0,"Watch");
        }
    }
(d). CustomAdapter.java
  • Unsere Adapterklasse.
  • Leitet sich von BaseAdapter ab.

Wird unsere Daten an unsere benutzerdefinierten Ansichten anpassen.


    public class CustomAdapter extends BaseAdapter {
        Context c;
        ArrayList<Movie> movies;
        LayoutInflater inflater;
        String name;

        public CustomAdapter(Context c, ArrayList<Movie> movies) {
            this.c = c;
            this.movies = movies;
        }

        @Override
        public int getCount() {
            return movies.size();
        }

        @Override
        public Object getItem(int position) {
            return movies.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {

            if(inflater==null)
            {
                inflater= (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            }

            if(convertView==null)
            {
                convertView=inflater.inflate(R.layout.model,parent,false);
            }

            //BIND DATA TO VIEWS
            MyViewHolder holder=new MyViewHolder(convertView);
            holder.nameTxt.setText(movies.get(position).getName());
            holder.img.setImageResource(movies.get(position).getImage());

            holder.setLongClickListener(new LongClickListener() {
                @Override
                public void onItemLongClick() {
                    name=movies.get(position).getName();
                    Toast.makeText(c,name,Toast.LENGTH_SHORT).show();
                }
            });

            return convertView;
        }

        public void getSelecetedItem(MenuItem item)
        {
            Toast.makeText(c,name+" "+item.getTitle(),Toast.LENGTH_SHORT).show();
        }
    }
(e). MainActivity.java
  • Unsere MainActivity.
  • Verweist auf ListView aus Layout.
  • Instantiiert den CustomAdapter und setzt ihn auf unsere ListView.

    public class MainActivity extends AppCompatActivity {

       ListView lv;
        CustomAdapter adapter;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);

            FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                            .setAction("Action", null).show();
                }
            });

            lv= (ListView) findViewById(R.id.lv);
            adapter=new CustomAdapter(this,getMovies());

            lv.setAdapter(adapter);

        }

        @Override
        public boolean onContextItemSelected(MenuItem item) {

             adapter.getSelecetedItem(item);
            return super.onContextItemSelected(item);
        }

        private ArrayList<Movie> getMovies() {
            //COLECTION OF CRIME MOVIES
            ArrayList<Movie> movies=new ArrayList<>();

            Movie movie=new Movie("Shuttle Carrier",R.drawable.shuttlecarrier);

            //ADD ITR TO COLLECTION
            movies.add(movie);

            movie=new Movie("Fruits",R.drawable.fruits);
            movies.add(movie);

            movie=new Movie("Breaking Bad",R.drawable.breaking);
            movies.add(movie);

            movie=new Movie("Crisis",R.drawable.crisis);
            movies.add(movie);

            movie=new Movie("Ghost Rider",R.drawable.rider);
            movies.add(movie);

            movie=new Movie("Star Wars",R.drawable.starwars);
            movies.add(movie);

            movie=new Movie("BlackList",R.drawable.red);
            movies.add(movie);

            movie=new Movie("Men In Black",R.drawable.meninblack);
            movies.add(movie);

            movie=new Movie("Game Of Thrones",R.drawable.thrones);
            movies.add(movie);

            return movies;

        }
    }

4. Download

Hey, alles ist in der Quellcode-Referenz, die gut kommentiert und leicht zu verstehen ist und unten heruntergeladen werden kann.

Schauen Sie sich auch unser Video-Tutorial an, das detaillierter ist und Schritt für Schritt erklärt wird.

1. GitHub Direkter Download
2. GitHub Durchsuchen
3. YouTube YouTube-Kanal

Categorized in: