[JAVA] Je souhaite sélectionner plusieurs éléments avec une disposition personnalisée dans la boîte de dialogue

Chose que tu veux faire

Il n'y avait pas de problème si je n'en choisissais qu'un (choix unique), mais j'étais accro aux sélections multiples, alors j'ai pris une note.

activity_main.xml Disposition qui affiche simplement le bouton.

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="Dialogue ouvert"
        android:textAlignment="center"
        android:textSize="20sp"
        android:textStyle="bold"/>

</LinearLayout>

choice.xml Disposition pour un cas dans la boîte de dialogue

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="Faux texte" />
            </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="Faux texte" />

            </LinearLayout>

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

MainActivity.java La dernière chose.

  1. Préparez une sous-classe avec des informations pour les choix
  2. Préparez votre propre adaptateur, affichez-le ici et écrivez quelque chose comme
  3. Préparer la partie de génération de dialogue

Direction telle que. En fait, à partir d'ici, je précise par nom avant d'afficher.

À propos, les données de test utilisent Utiliser la liste des gestionnaires de la ville d'Osaka.

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; //Bouton pour ouvrir la boîte de dialogue avec tap

    private ArrayList<Item> allItems;   //Emplacement de stockage des informations sur les options
    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);

        //Préparez vos choix
        allItems = this.setData();

        //Événement de clic de bouton
        btnOpenDialog.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //Préparez vos choix
                DialogAdapter adapter = new DialogAdapter(getApplicationContext(), 0, allItems);
                ListView listView = new ListView(con);
                AlertDialog.Builder dialog = new AlertDialog.Builder(con);

                //Préparer le traitement en appuyant sur une option
                listView.setOnItemClickListener(new ListView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        //Commutation de l'état de vérification
                        allItems.get(position).setFlg(!(allItems.get(position).isFlg()));

                        //Changer l'affichage de l'image de contrôle
                        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);
                        }
                    }
                });

                //Préparation du titre
                TextView newTitle = new TextView(con);
                newTitle.setText("Veuillez sélectionner");
                newTitle.setTextSize(24.0f);

                //Affichage de la boîte de dialogue
                listView.setAdapter(adapter);
                dialog.setView(listView).create();
                dialog.setPositiveButton("Terminé", null);
                dialog.setCustomTitle(newTitle);
                dialog.show();
            }
        });
    }

    //Adaptateur d'origine
    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);
            }

            //Élément d'affichage principal
            TextView textMain = v.findViewById(R.id.textMain);
            textMain.setText(item.getName());

            //Élément d'affichage secondaire
            TextView textSub = v.findViewById(R.id.textSub);
            textSub.setText(item.getSub());

            //Changer l'image de la case à cocher en fonction de l'état de la vérification
            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;
        }
    }

    //Sous-classe contenant les informations affichées en option
    private class Item {
        private int id      = 0;     //Pour l'identification du système
        private String name = "";    //Élément d'affichage principal
        private String sub  = "";    //Élément d'affichage secondaire
        private boolean flg = false; //Vérifier l'état

        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;
        }
    }

    //Créer des données de choix pour les tests
    private ArrayList<Item> setData() {
        Item item;
        ArrayList<Item> testData = new ArrayList<>();

        item = new Item();
        item.setId(1);item.setName("Kenji Temukai");item.setSub("Directeur adjoint du bureau de promotion du capital");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(2);item.setName("Yukihiro Inoue");item.setSub("Directeur adjoint du bureau de promotion du capital");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(3);item.setName("Yoshihiro Tanaka");item.setSub("Directeur adjoint du bureau de promotion du capital");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(4);item.setName("Mizumori Katsuhiro");item.setSub("Directeur adjoint du département des affaires générales du Bureau de la promotion du capital");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(5);item.setName("Kimihide Yoshimura");item.setSub("Directeur adjoint du département des affaires générales du Bureau de la promotion du capital");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(6);item.setName("Masaki Jouma");item.setSub("Directeur adjoint de la section des affaires générales du Bureau de la promotion du capital");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(7);item.setName("Nishioka Daizo");item.setSub("Directeur adjoint de la section des affaires générales du Bureau de la promotion du capital");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(8);item.setName("Yoshikazu Matsui");item.setSub("Directeur adjoint du département de la promotion des immobilisations");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(9);item.setName("Hiroshi Sakata");item.setSub("Directeur adjoint du département de la promotion des immobilisations");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(10);item.setName("Yuji Kawaguchi");item.setSub("Gestionnaire adjoint de la section de planification du Bureau de la promotion des immobilisations");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(11);item.setName("Hashimoto Shizuko");item.setSub("Gestionnaire adjoint de la section de planification du Bureau de la promotion des immobilisations");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(12);item.setName("Okumura Kakuichi");item.setSub("Directeur adjoint de la section de restructuration des activités du Bureau de la promotion du capital");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(13);item.setName("Hironori Hashimoto");item.setSub("Directeur adjoint de la section de restructuration des activités du Bureau de la promotion du capital");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(14);item.setName("Tomohiro Inoue");item.setSub("Gestionnaire adjoint de la planification du système du Bureau de la promotion des immobilisations");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(15);item.setName("Fukuoka Hirotaka");item.setSub("Gestionnaire adjoint de la planification du système du Bureau de la promotion des immobilisations");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(16);item.setName("Tomohiro Enoshita");item.setSub("Gestionnaire adjoint de la section de la planification du système du Bureau de la promotion des immobilisations");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(17);item.setName("Kenji Masuda");item.setSub("Gestionnaire adjoint de la section de la planification du système du Bureau de la promotion des immobilisations");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(18);item.setName("Kobayashi Masumi");item.setSub("Gestionnaire adjoint de la section de la planification du système du Bureau de la promotion des immobilisations");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(19);item.setName("Takeshi Ashihara");item.setSub("Gestionnaire adjoint de la section de la coordination financière");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(20);item.setName("Masanobu Kusumi");item.setSub("Gestionnaire adjoint de la section de la coordination financière");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(21);item.setName("Masaaki Kawada");item.setSub("Gestionnaire adjoint de la section des actifs et de la dette du Bureau de la promotion du capital");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(22);item.setName("Yoshiyuki Nakagawa");item.setSub("Gestionnaire adjoint de la section des actifs et de la dette du Bureau de la promotion du capital");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(23);item.setName("Kawahira Shinzen");item.setSub("Directeur adjoint du département de coordination du système du Bureau de la promotion des capitaux");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(24);item.setName("Kazushi Oshita");item.setSub("Directeur adjoint du département de coordination du système du Bureau de la promotion des capitaux");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(25);item.setName("Kuroda seul");item.setSub("Gestionnaire adjoint de la section de la coordination stratégique du Bureau de la promotion des immobilisations");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(26);item.setName("Hideaki Mizuno");item.setSub("Gestionnaire adjoint de la section de la coordination stratégique du Bureau de la promotion des immobilisations");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(27);item.setName("Makoto Tsujimoto");item.setSub("Directeur commercial adjoint du bureau de promotion du capital");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(28);item.setName("Mitsuru Saito");item.setSub("Directeur commercial adjoint du bureau de promotion du capital");item.setFlg(true);
        testData.add(item);
        item = new Item();
        item.setId(29);item.setName("Yoshihiro Taniguchi");item.setSub("Gestionnaire adjoint du système organisationnel du Bureau de la promotion des capitaux");item.setFlg(false);
        testData.add(item);
        item = new Item();
        item.setId(30);item.setName("Takashi Sekoguchi");item.setSub("Gestionnaire adjoint du système organisationnel du Bureau de la promotion des capitaux");item.setFlg(true);
        testData.add(item);

        return testData;
    }
}

prime

Exemple de source

Recommended Posts

Je souhaite sélectionner plusieurs éléments avec une disposition personnalisée dans la boîte de dialogue
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (édition PowerMockito)
Je souhaite afficher un PDF chinois (coréen) avec des rapports fins
Je veux ForEach un tableau avec une expression Lambda en Java
Même en Java, je veux sortir true avec un == 1 && a == 2 && a == 3 (deuxième décoction Javassist)
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (Black Magic)
Je veux utiliser une petite icône dans Rails
Je souhaite surveiller un fichier spécifique avec WatchService
Je souhaite définir une fonction dans la console Rails
Je veux cliquer sur une broche GoogleMap dans RSpec
Je souhaite modifier le chemin après une nouvelle inscription après m'être connecté avec plusieurs appareils.
Je veux trouver un chemin relatif dans une situation où Path est utilisé
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
Je souhaite créer un formulaire pour sélectionner la catégorie [Rails]
Je veux donner un nom de classe à l'attribut select
Je veux créer un fichier Parquet même en Ruby
Je veux créer un bouton avec un saut de ligne avec link_to [Note]
Je souhaite ajouter une fonction de navigation avec ruby on rails
[Java] Je veux effectuer distinctement avec la clé dans l'objet
Je veux extraire entre des chaînes de caractères avec une expression régulière
Je souhaite développer une application web!
Je veux écrire un joli build.gradle
Je souhaite utiliser DBViewer avec Eclipse 2018-12! !!
Je veux écrire un test unitaire!
Je veux utiliser @Autowired dans Servlet
[Rails] Je souhaite envoyer des données de différents modèles dans un formulaire
[Note] Je veux obtenir dans l'ordre inverse en utilisant afterLast avec JdbcTemplate
Je souhaite créer un SNS Web sombre avec Jakarta EE 8 avec Java 11
Je voulais mettre en place un diaporama de manière à la mode avec slick.
[Ruby] Je souhaite afficher les éléments publiés par ordre de date la plus récente
"Professeur, je souhaite implémenter une fonction de connexion au printemps" ① Hello World
[Pour les débutants] Je souhaite saisir automatiquement des données pré-enregistrées dans le formulaire de saisie avec une commande de sélection.
Lors de l'installation d'un gem avec l'extension C dans Ruby, je veux le terminer rapidement en utilisant plusieurs cœurs de processeur comme make -j4
Je souhaite envoyer un e-mail en Java.
[Go To Travel] J'ai cherché un plan avec une carte quo
Je souhaite pouvoir lire des fichiers en utilisant refile avec administrate [rails6]
[Ruby] Je veux faire un saut de méthode!
Je veux utiliser java8 forEach avec index
Je souhaite transmettre APP_HOME pour me connecter à Gradle
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
Je veux écrire une simple répétition d'une chaîne de caractères
Je souhaite concevoir une structure pour la gestion des exceptions
rsync4j --Je veux toucher rsync en Java.
Je veux jouer avec Firestore de Rails
Rails6 Je veux créer un tableau de valeurs avec une case à cocher
Je veux être finalement même à kotlin
SpringSecurity J'étais accro à essayer de me connecter avec un mot de passe haché (résolu)
Faisons une application TODO avec Java 2 Je veux créer un modèle avec Spring Initializr et créer Hello world
J'ai essayé de casser le bloc avec java (1)
Je souhaite effectuer un traitement d'agrégation avec spring-batch
[Rails] Je veux charger du CSS avec webpacker
Je veux obtenir la valeur en Ruby
Même en Java, je veux sortir vrai avec un == 1 && a == 2 && a == 3 (magie grise qui n'est pas tant que magie noire)
Même en Java, je veux sortir true avec un == 1 && a == 2 && a == 3 (Royal road edition qui n'est ni magique ni rien)