[JAVA] Ich möchte im Dialogfeld mehrere Elemente mit einem benutzerdefinierten Layout auswählen

Was du machen willst

Es gab kein Problem, nur eine (Single Choice) auszuwählen, aber ich war süchtig nach Mehrfachauswahl, also machte ich mir eine Notiz.

activity_main.xml Layout, das nur die Schaltfläche anzeigt.

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:gravity="center"
              android:orientation="vertical"
              tools:context="example.com.samplemultichoice.MainActivity">

    <TextView
        android:id="@+id/btnOpenDialog"
        android:layout_width="200dp"
        android:layout_height="60dp"
        android:background="#000000"
        android:textColor="#FFFFFF"
        android:gravity="center"
        android:text="Dialog geöffnet"
        android:textAlignment="center"
        android:textSize="20sp"
        android:textStyle="bold"/>

</LinearLayout>

choice.xml Layout für einen Fall im Dialog

choice.xml


<?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:layout_gravity="center" >

    <LinearLayout
        android:id="@+id/checkboxArea"
        android:layout_width="0dp"
        android:layout_height="80dp"
        android:layout_weight="20">

        <ImageView
            android:id="@+id/agentCheck"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="10dp"
            android:scaleType="fitCenter"
            android:src="@drawable/check_off" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="80">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                >

                <TextView
                    android:id="@+id/textMain"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="3dp"
                    android:textSize="32dp"
                    android:text="Dummer Text" />
            </LinearLayout>
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
                <TextView
                    android:id="@+id/textSub"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="2dp"
                    android:textSize="20dp"
                    android:text="Dummer Text" />

            </LinearLayout>

        </LinearLayout>
    </LinearLayout>
</LinearLayout>

MainActivity.java Das Letzte.

  1. Bereiten Sie eine Unterklasse mit Informationen zur Auswahl vor
  2. Bereiten Sie Ihren eigenen Adapter vor, zeigen Sie diesen hier an und schreiben Sie so etwas wie
  3. Bereiten Sie den Dialoggenerierungsteil vor

Richtung wie. Von hier aus schränke ich mich vor dem Anzeigen nach Namen ein.

Übrigens verwenden die Testdaten Osaka City Manager List verwenden.

MainActivity.java


package example.com.samplemultichoice;

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.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private TextView btnOpenDialog; //Schaltfläche zum Öffnen des Dialogs mit Tippen

    private ArrayList<Item> allItems;   //Speicherort der Optionsinformationen
    private Context con = MainActivity.this;

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

        //Bereiten Sie Entscheidungen vor
        allItems = this.setData();

        //Button-Click-Ereignis
        btnOpenDialog.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //Bereiten Sie Entscheidungen vor
                DialogAdapter adapter = new DialogAdapter(getApplicationContext(), 0, allItems);
                ListView listView = new ListView(con);
                AlertDialog.Builder dialog = new AlertDialog.Builder(con);

                //Bereiten Sie die Verarbeitung vor, wenn Sie auf eine Option tippen
                listView.setOnItemClickListener(new ListView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        //Prüfstatus wechseln
                        allItems.get(position).setFlg(!(allItems.get(position).isFlg()));

                        //Schalten Sie die Anzeige des Scheckbildes
                        ImageView checkImg = view.findViewById(R.id.agentCheck);
                        if (allItems.get(position).isFlg()) {
                            checkImg.setImageResource(R.drawable.check_on);
                        } else {
                            checkImg.setImageResource(R.drawable.check_off);
                        }
                    }
                });

                //Vorbereitung des Titels
                TextView newTitle = new TextView(con);
                newTitle.setText("Bitte auswählen");
                newTitle.setTextSize(24.0f);

                //Dialoganzeige
                listView.setAdapter(adapter);
                dialog.setView(listView).create();
                dialog.setPositiveButton("Erledigt", null);
                dialog.setCustomTitle(newTitle);
                dialog.show();
            }
        });
    }

    //Originaladapter
    private class DialogAdapter extends ArrayAdapter<Item> {
        private LayoutInflater inflater;

        private DialogAdapter(Context context, int resource, List<Item> objects) {
            super(context, resource, objects);
            inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public View getView(int position, View v, ViewGroup parent) {
            Item item = getItem(position);
            if (null == v) {
                v = inflater.inflate(R.layout.choice, null);
            }

            //Hauptanzeigeelement
            TextView textMain = v.findViewById(R.id.textMain);
            textMain.setText(item.getName());

            //Unteranzeigeelement
            TextView textSub = v.findViewById(R.id.textSub);
            textSub.setText(item.getSub());

            //Schalten Sie das Kontrollkästchenbild abhängig vom Kontrollstatus um
            ImageView checkImg = v.findViewById(R.id.agentCheck);
            if (item.isFlg()) {
                checkImg.setImageResource(R.drawable.check_on);
            } else {
                checkImg.setImageResource(R.drawable.check_off);
            }

            return v;
        }
    }

    //Unterklasse zum Halten von Informationen, die als Option angezeigt werden
    private class Item {
        private int id      = 0;     //Zur Systemidentifikation
        private String name = "";    //Hauptanzeigeelement
        private String sub  = "";    //Unteranzeigeelement
        private boolean flg = false; //Status überprüfen

        private int getId() {
            return id;
        }
        private void setId(int id) {
            this.id = id;
        }
        private String getName() {
            return name;
        }
        private void setName(String name) {
            this.name = name;
        }
        private String getSub() {
            return sub;
        }
        private void setSub(String sub) {
            this.sub = sub;
        }
        private boolean isFlg() {
            return flg;
        }
        private void setFlg(boolean flg) {
            this.flg = flg;
        }
    }

    //Erstellen Sie Auswahldaten zum Testen
    private ArrayList<Item> setData() {
        Item item;
        ArrayList<Item> testData = new ArrayList<>();

        item = new Item();
        item.setId(1);item.setName("Kenji Temukai");item.setSub("Stellvertretender Direktor des Büros für Kapitalförderung");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(2);item.setName("Yukihiro Inoue");item.setSub("Stellvertretender Direktor des Büros für Kapitalförderung");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(3);item.setName("Yoshihiro Tanaka");item.setSub("Stellvertretender Direktor des Büros für Kapitalförderung");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(4);item.setName("Katsuhiro Mizumori");item.setSub("Stellvertretender Abteilungsleiter für allgemeine Angelegenheiten des Büros für Kapitalförderung");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(5);item.setName("Kimihide Yoshimura");item.setSub("Stellvertretender Abteilungsleiter für allgemeine Angelegenheiten des Büros für Kapitalförderung");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(6);item.setName("Masaki Jouma");item.setSub("Stellvertretender Abteilungsleiter für allgemeine Angelegenheiten des Büros für Kapitalförderung");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(7);item.setName("Nishioka Daizo");item.setSub("Stellvertretender Abteilungsleiter für allgemeine Angelegenheiten des Büros für Kapitalförderung");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(8);item.setName("Yoshikazu Matsui");item.setSub("Stellvertretender Leiter der Abteilung für Kapitalförderung Stellvertretender Leiter der Abteilung für Kapitalplanungsförderung");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(9);item.setName("Hiroshi Sakata");item.setSub("Stellvertretender Leiter der Abteilung für Kapitalförderung Stellvertretender Leiter der Abteilung für Kapitalplanungsförderung");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(10);item.setName("Yuji Kawaguchi");item.setSub("Stellvertretender Leiter der Planungsabteilung des Büros für Kapitalförderung");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(11);item.setName("Hashimoto Shizuko");item.setSub("Stellvertretender Leiter der Planungsabteilung des Büros für Kapitalförderung");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(12);item.setName("Okumura Kakuichi");item.setSub("Stellvertretender Abteilungsleiter des Büros für Kapitalförderung zur Restrukturierung");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(13);item.setName("Hironori Hashimoto");item.setSub("Stellvertretender Abteilungsleiter des Büros für Kapitalförderung zur Restrukturierung");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(14);item.setName("Tomohiro Inoue");item.setSub("Stellvertretender Systemplanungsleiter des Capital Promotion Bureau");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(15);item.setName("Fukuoka Hirotaka");item.setSub("Stellvertretender Systemplanungsleiter des Capital Promotion Bureau");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(16);item.setName("Enoshita Tomohiro");item.setSub("Stellvertretender Abteilungsleiter für Systemplanung des Capital Promotion Bureau");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(17);item.setName("Kenji Masuda");item.setSub("Stellvertretender Abteilungsleiter für Systemplanung des Capital Promotion Bureau");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(18);item.setName("Kobayashi Masumi");item.setSub("Stellvertretender Abteilungsleiter für Systemplanung des Capital Promotion Bureau");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(19);item.setName("Takeshi Ashihara");item.setSub("Stellvertretender Abteilungsleiter für Finanzkoordination des Capital Promotion Bureau");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(20);item.setName("Masanobu Kusumi");item.setSub("Stellvertretender Abteilungsleiter für Finanzkoordination des Capital Promotion Bureau");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(21);item.setName("Masaaki Kawada");item.setSub("Stellvertretender Leiter der Abteilung Kapital- und Schuldenförderung des Capital Promotion Bureau");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(22);item.setName("Yoshiyuki Nakagawa");item.setSub("Stellvertretender Leiter der Abteilung Kapital- und Schuldenförderung des Capital Promotion Bureau");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(23);item.setName("Kawahira Shinzen");item.setSub("Stellvertretender Leiter der Systemkoordinierungsabteilung des Capital Promotion Bureau");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(24);item.setName("Kazushi Oshita");item.setSub("Stellvertretender Leiter der Systemkoordinierungsabteilung des Capital Promotion Bureau");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(25);item.setName("Kuroda allein");item.setSub("Stellvertretender Abteilungsleiter für strategische Koordinierung des Kapitals für Kapitalförderung");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(26);item.setName("Hideaki Mizuno");item.setSub("Stellvertretender Abteilungsleiter für strategische Koordinierung des Kapitals für Kapitalförderung");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(27);item.setName("Makoto Tsujimoto");item.setSub("Stellvertretender Leiter des Büros für Kapitalförderungsbüro");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(28);item.setName("Mitsuru Saito");item.setSub("Stellvertretender Leiter des Büros für Kapitalförderungsbüro");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(29);item.setName("Yoshihiro Taniguchi");item.setSub("Stellvertretender Leiter des Organisationssystems des Capital Promotion Bureau");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(30);item.setName("Takashi Sekoguchi");item.setSub("Stellvertretender Leiter des Organisationssystems des Capital Promotion Bureau");item.setFlg(true);
        testData.add(item);

        return testData;
    }
}

Bonus

Recommended Posts

Ich möchte im Dialogfeld mehrere Elemente mit einem benutzerdefinierten Layout auswählen
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (PowerMockito Edition)
Ich möchte ein chinesisches (koreanisches) PDF mit dünnen Berichten anzeigen
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
Sogar in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (Javassist zweite Abkochung)
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 (Black Magic) ausgeben.
Ich möchte ein kleines Symbol in Rails verwenden
Ich möchte eine bestimmte Datei mit WatchService überwachen
Ich möchte eine Funktion in der Rails Console definieren
Ich möchte in RSpec auf einen GoogleMap-Pin klicken
Ich möchte den Pfad nach der neuen Registrierung ändern, nachdem ich mich mit mehreren Geräten angemeldet habe.
Ich möchte einen relativen Pfad in einer Situation finden, in der Pfad verwendet wird
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ich möchte ein Formular erstellen, um die Kategorie [Schienen] auszuwählen
Ich möchte dem select-Attribut einen Klassennamen geben
Ich möchte eine Parkettdatei auch in Ruby erstellen
Ich möchte mit link_to [Hinweis] eine Schaltfläche mit einem Zeilenumbruch erstellen.
Ich möchte eine Browsing-Funktion mit Ruby on Rails hinzufügen
[Java] Ich möchte mit dem Schlüssel im Objekt eindeutig arbeiten
Ich möchte mit einem regulären Ausdruck zwischen Zeichenketten extrahieren
Ich möchte eine Webanwendung entwickeln!
Ich möchte ein schönes build.gradle schreiben
Ich möchte DBViewer mit Eclipse 2018-12 verwenden! !!
Ich möchte einen Unit Test schreiben!
Ich möchte @Autowired in Servlet verwenden
[Rails] Ich möchte Daten verschiedener Modelle in einem Formular senden
[Hinweis] Ich möchte mit afterLast mit JdbcTemplate in umgekehrter Reihenfolge arbeiten
Ich möchte mit Jakarta EE 8 mit Java 11 ein dunkles Web-SNS erstellen
Ich wollte eine Diashow mit Slick modisch umsetzen.
[Ruby] Ich möchte veröffentlichte Artikel in der Reihenfolge des neuesten Datums anzeigen
"Lehrer, ich möchte im Frühjahr eine Anmeldefunktion implementieren" ① Hallo Welt
[Für Anfänger] Ich möchte mit einem Auswahlbefehl automatisch vorregistrierte Daten in das Eingabeformular eingeben.
Wenn ich ein Gem mit C-Erweiterung in Ruby installiere, möchte ich es schnell mit mehreren CPU-Kernen wie make -j4 fertigstellen
Ich möchte eine E-Mail in Java senden.
[Go To Travel] Ich suchte nach einem Plan mit einer Quo-Karte
Ich möchte in der Lage sein, Dateien mit refile mit administrate [rails6] zu lesen.
[Ruby] Ich möchte einen Methodensprung machen!
Ich möchte Java8 für jeden mit Index verwenden
Ich möchte APP_HOME an Logback in Gradle übergeben
Ich wollte (a == 1 && a == 2 && a == 3) in Java wahr machen
Ich möchte eine einfache Wiederholung einer Zeichenkette schreiben
Ich möchte eine Struktur für die Ausnahmebehandlung entwerfen
rsync4j - Ich möchte rsync in Java berühren.
Ich möchte mit Firestore von Rails spielen
Rails6 Ich möchte ein Array von Werten mit einem Kontrollkästchen erstellen
Ich möchte irgendwann sogar in Kotlin sein
SpringSecurity Ich war süchtig danach, mich mit einem Hash-Passwort anzumelden (gelöst)
Lassen Sie uns eine TODO-Anwendung mit Java 2 erstellen. Ich möchte eine Vorlage mit Spring Initializr erstellen und eine Hello-Welt erstellen
Ich habe versucht, den Block mit Java zu brechen (1)
Ich möchte die Aggregationsverarbeitung mit Spring-Batch durchführen
[Rails] Ich möchte CSS mit Webpacker laden
Ich möchte den Wert in Ruby erhalten
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (graue Magie, die weniger schwarze Magie ist)
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (Royal Road Edition, die weder Magie noch irgendetwas ist)