Es wird ein Memo der Liste sein, das reduziert werden kann.
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;
}
}
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.
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;
}
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