[JAVA] Verwendung von ExpandableListView in Android Studio

Einführung

Es wird ein Memo der Liste sein, das reduziert werden kann.

Code

string.xml


<resources>
    <string name="app_name">ExpandableListView</string>
</resources>

activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <ExpandableListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/exListView"></ExpandableListView>

</LinearLayout>

MainActivity.java


package com.websarva.wings.android.expandablelistview;

import android.app.AlertDialog;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.SimpleExpandableListAdapter;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    List<Map<String, String>> parentList;
    List<List<Map<String, String>>> childList;
    List<Map<String, String>> childDataList;
    Map<String, String> childtData;

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

        parentList = new ArrayList<>();
        childList = new ArrayList<>();

        //Generieren Sie Inhalte, die in der übergeordneten Liste angezeigt werden sollen
        setParentList("parentKey", "Elternteil 1");
        setParentList("parentKey", "Elternteil 2");

        //Generieren Sie Inhalte, die in der untergeordneten Liste angezeigt werden sollen
        String firstItemName1[] = {"Kind 1", "Kind 2"};
        String secondItemName1[] = {"Kind 1. Stufe", "Kind zweite Stufe"};
        setChildDataList("childKey1", firstItemName1, "childKey2", secondItemName1);

        String firstItemName2[] = {"Kind A.", "Kind B.", "Kind C."};
        String secondItemName2[] = {"Kind Eine Bühne", "Kind B Stadium", "Kind C Stadium"};
        setChildDataList("childKey1", firstItemName2, "childKey2", secondItemName2);

        //Adaptererstellung
        SimpleExpandableListAdapter adapter =
                new SimpleExpandableListAdapter(
                        this,
                        parentList,
                        android.R.layout.simple_expandable_list_item_1,
                        new String[]{"parentKey"},
                        new int[]{android.R.id.text1},
                        childList,
                        android.R.layout.simple_expandable_list_item_2,
                        new String[]{"childKey1", "childKey2"},
                        new int[]{android.R.id.text1, android.R.id.text2}
                );

        ExpandableListView elv = findViewById(R.id.exListView);
        elv.setAdapter(adapter);

    }

    /**
     *Prozess zum Generieren des Inhalts, der in der übergeordneten Liste angezeigt werden soll
     * @param parentKey
     * @param value
     * @return parentList
     */
    private List<Map<String, String>> setParentList(String parentKey, String value) {
        Map<String, String> parentData = new HashMap<String, String>();
        parentData.put(parentKey, value);
        parentList.add(parentData);
        return parentList;
    }

    /**
     *Prozess zum Generieren des Inhalts, der in der untergeordneten Liste angezeigt werden soll
     * @param childKey1
     * @param firstItemName
     * @param childKey2
     * @param secondItemName
     * @return childDataList
     */
    private List<Map<String, String>> setChildData(String childKey1, String firstItemName, String childKey2, String secondItemName) {
        childtData = new HashMap<String, String>();
        childtData.put(childKey1, firstItemName);
        childtData.put(childKey2, secondItemName);
        childDataList.add(childtData);
        return childDataList;
    }

    /**
     *So erstellen Sie so viele untergeordnete Listen wie angezeigt
     * @param childKey1
     * @param firstItemName
     * @param childKey2
     * @param secondItemName
     * @return childList
     */
    private List<List<Map<String, String>>> setChildDataList(String childKey1, String firstItemName[], String childKey2, String secondItemName[]) {
        childDataList = new ArrayList<>();
        //Wiederholen Sie so oft wie die Anzahl der zu erstellenden Elemente
        for (int i = 0; i < firstItemName.length; i++) {
            setChildData(childKey1, firstItemName[i], childKey2, secondItemName[i]);
        }
        childList.add(childDataList);
        return childList;
    }

}

Ausführungsergebnis

新しいビットマップ イメージ.jpeg

Kommentar

Verwenden Sie den SimpleExpandableListAdapter, um die Daten festzulegen, die als Liste in der ExpandableListView angezeigt werden sollen. Führen Sie die folgenden Schritte aus, um die Daten, die Sie als Liste anzeigen möchten, im SimpleExpandableListAdapter zu speichern.

Verfahren

  1. Prozess zum Generieren des Inhalts, der in der übergeordneten Liste angezeigt werden soll
  2. Prozess zum Generieren des Inhalts, der in der untergeordneten Liste angezeigt werden soll
  3. Anzahl der Elemente in der untergeordneten Liste, wiederholte Verarbeitung
  4. Speichern Sie die anzuzeigenden Daten in der übergeordneten Liste in Map
  5. Speichern Sie die anzuzeigenden Daten in der untergeordneten Liste in Map
  6. Speichern Sie die übergeordnete Liste und die untergeordnete Liste in SimpleExpandableListAdapter

Speicherung aller Daten

Erstellen Sie so viele übergeordnete Listen, wie die setParentList-Methode aufgerufen wird. Übergeben Sie als Argument den Schlüssel und den Wert, die in MAP gespeichert werden sollen.

setParentList.Speicherung der übergeordneten Daten


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

        parentList = new ArrayList<>();

     ~Kürzung~

        //Generieren Sie Inhalte, die in der übergeordneten Liste angezeigt werden sollen
        setParentList("parentKey", "Elternteil 1");
        setParentList("parentKey", "Elternteil 2");

     ~Kürzung~
    }

private List<Map<String, String>> setParentList(String parentKey, String value) {
        Map<String, String> parentData = new HashMap<String, String>();
        parentData.put(parentKey, value);
        parentList.add(parentData);
        return parentList;
    }

Erstellen Sie so viele übergeordnete Listen, wie die setChildDataList-Methode aufgerufen wird. Übergeben Sie als Argument den Schlüssel (1. und 3. Argument) und den Wert (2. und 4. Argument), die in MAP gespeichert werden sollen.

setChildDataList.Speicherung von untergeordneten Daten


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

     ~Kürzung~
        
        childList = new ArrayList<>();

     ~Kürzung~

        //Generieren Sie Inhalte, die in der untergeordneten Liste angezeigt werden sollen
        String firstItemName1[] = {"Kind 1", "Kind 2"};
        String secondItemName1[] = {"Kind 1. Stufe", "Kind zweite Stufe"};
        setChildDataList("childKey1", firstItemName1, "childKey2", secondItemName1);

        String firstItemName2[] = {"Kind A.", "Kind B.", "Kind C."};
        String secondItemName2[] = {"Kind Eine Bühne", "Kind B Stadium", "Kind C Stadium"};
        setChildDataList("childKey1", firstItemName2, "childKey2", secondItemName2);

     ~Kürzung~
     }

private List<Map<String, String>> setChildData(String childKey1, String firstItemName, String childKey2, String secondItemName) {
        childtData = new HashMap<String, String>();
        childtData.put(childKey1, firstItemName);
        childtData.put(childKey2, secondItemName);
        childDataList.add(childtData);
        return childDataList;
    }

    private List<List<Map<String, String>>> setChildDataList(String childKey1, String firstItemName[], String childKey2, String secondItemName[]) {
        childDataList = new ArrayList<>();
        //Wiederholen Sie so oft wie die Anzahl der zu erstellenden Elemente
        for (int i = 0; i < firstItemName.length; i++) {
            setChildData(childKey1, firstItemName[i], childKey2, secondItemName[i]);
        }
        childList.add(childDataList);
        return childList;
    }

Adapterspeicher

Speichern Sie übergeordnete und untergeordnete Daten im Adapter

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

     ~Kürzung~

        //Adaptererstellung
        SimpleExpandableListAdapter adapter =
                new SimpleExpandableListAdapter(
                        this,・ ・ ・ ①
                        parentList,・ ・ ・ ②
                        android.R.layout.simple_expandable_list_item_1,・ ・ ・ ③
                        new String[]{"parentKey"},・ ・ ・ ④
                        new int[]{android.R.id.text1},・ ・ ・ ⑤
                        childList,・ ・ ・ ②
                        android.R.layout.simple_expandable_list_item_2,・ ・ ・ ③
                        new String[]{"childKey1", "childKey2"},・ ・ ・ ④
                        new int[]{android.R.id.text1, android.R.id.text2}・ ・ ・ ⑤
                );

        ExpandableListView elv = findViewById(R.id.exListView);
        elv.setAdapter(adapter);

    }

① Kontext, dem ExpandableListView zugeordnet ist ②List ③ R-Wert, der das Layout jeder Linie darstellt ④ MAP-Taste ⑤ TextView ID, die Zeichen im Layout anzeigt

So verwenden Sie ExpandableListView.

Recommended Posts

Verwendung von ExpandableListView in Android Studio
Wie man Lombok im Frühling benutzt
Verwendung von InjectorHolder in OpenAM
Wie verwende ich Klassen in Java?
Mehrsprachige Unterstützung für Java Verwendung des Gebietsschemas
Verwendung des benannten Volumes in docker-compose.yml
Verwendung von UsageStatsManager in Android Studio (Überprüfen der Startzeit anderer Apps)
Verwendung von Docker in VSCode DevContainer
Verwendung von Umgebungsvariablen in RubyOnRails
Verstehe in 5 Minuten !! Wie man Docker benutzt
Verwendung von credentials.yml.enc aus Rails 5.2
Verwendung von Map
Wie benutzt man rbenv?
Verwendung mit_option
Verwendung von fields_for
Verwendung der Karte
Verwendung von collection_select
Wie benutzt man Twitter4J
Wie benutzt man active_hash! !!
Verwendung von MapStruct
Verwendung von TreeSet
[Verwendung des Etiketts]
Wie man Identität benutzt
Wie man Hash benutzt
Hinweise zu Android Studio
Verwendung von Dozer.mapper
Wie benutzt man Gradle?
Verwendung von org.immutables
Verwendung von java.util.stream.Collector
Verwendung von VisualVM
Verwendung von Map
3 Möglichkeiten zum Importieren von Bibliotheken in Android Studio
[Rails] Verwendung von Auswahlfeldern in Ransack
Verwendung von JQuery in Rails 6 js.erb
[Rails] Verwendung von PostgreSQL in einer Vagrant-Umgebung
[Ruby] Verwendung der Standardausgabe bei der bedingten Verzweigung
[Android Studio] So ändern Sie TextView in eine beliebige Schriftart [Java]
Verwendung der Ketten-API
[Java] Verwendung von Map
Verwendung der Warteschlange mit Priorität
[Rails] Verwendung von Enum
Verwendung von Java Optional
Verwendung von JUnit (Anfänger)
Verwendung der Z3-Bibliothek in Scala mit Eclipse
Verwendung von @Builder (Lombok)
Verwendung der Java-Klasse
Verstehen Sie, wie Sie den JSON-Decoder von Swift in 3 Minuten verwenden
Wie man Big Decimal benutzt
[Android Studio] [Java] So fixieren Sie den Bildschirm vertikal
[Java] Verwendung von removeAll ()
Verwendung von String [] args
Verwendung von Truth (Assertion Library für Java / Android)