web-dev-qa-db-fra.com

Comment puis-je ajouter des boutons personnalisés à une présentation AlertDialog?

J'ai AlertDialog avec des boutons positifs et négatifs. Dans AlertDialog, j'ai EditText et deux boutons (btnAdd1, btnAdd2). Je veux quand l'utilisateur clique sur le bouton btnAdd1 ou btnAdd2 ajouter le même texte à EditText dans AlertDialog (mais pas AlertDialog proche) Est-ce possible faire dans AlertDialog ou dois-je utiliser uniquement Dialog? 

Voici la présentation (R.layout.Prompt) de AlertDialog:

<LinearLayout>
<EditText
    Android:id="@+id/userInput"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:inputType="text" >

    <requestFocus />
</EditText>

<Button
    Android:id="@+id/btnAdd1"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="bla" />

<Button
    Android:id="@+id/btnAdd2"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="bla" />

  </LinearLayout>

Et c'est le code source:

    LayoutInflater layoutInflater = LayoutInflater.from(this);
        View promptView = layoutInflater.inflate(R.layout.Prompt, null);

    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
    alertDialogBuilder.setView(promptView);
    alertDialogBuilder
            .setCancelable(false)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                              //...

                }
            })
            .setNegativeButton("Cancel",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.cancel();
                        }
                    });

    AlertDialog alertD = alertDialogBuilder.create();
    alertD.show();

Je veux avoir accès à btnAdd1 et btnAdd2 à partir de la mise en page. Définissez OnClickListener () sur ces deux boutons.

22
Pepa Zapletal

Le code suivant va gonfler une vue à partir de R.layout.Prompt et le définir sur AlertDialog. Les boutons positive et negative ne seront pas utilisés. Vous pouvez définir les comportements onClick pour btnAdd1 et btnAdd2:

LayoutInflater layoutInflater = LayoutInflater.from(this);
View promptView = layoutInflater.inflate(R.layout.Prompt, null);

final AlertDialog alertD = new AlertDialog.Builder(this).create();

EditText userInput = (EditText) promptView.findViewById(R.id.userInput);

Button btnAdd1 = (Button) promptView.findViewById(R.id.btnAdd1);

Button btnAdd2 = (Button) promptView.findViewById(R.id.btnAdd2);

btnAdd1.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {

        // btnAdd1 has been clicked

    }
});

btnAdd2.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {

        // btnAdd2 has been clicked

    }
});

alertD.setView(promptView);

alertD.show();
40
Vikram

ce que vous voulez faire est

alertD.show();
Button button = (Button)promptView.findViewById(R.id.buttonId);
button.setOnClickListener(....)

utiliser la vue pour appeler findViewById, plutôt que l'activité, qui recherchera l'identifiant dans la présentation affichée.

4
jcw

Selon cette approche, je suis en mesure de créer le bouton d’image mais si je veux rejeter ou annuler le dialogue sur le bouton Annuler, alors ce que je dois faire ..

public static void alertDialogShow(final Context context,
            final String resultMobile) {

        LayoutInflater li = LayoutInflater.from(context);
        View promptsView = li.inflate(R.layout.Prompt,
                null);
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                context, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);
        // set prompts.xml to alertdialog builder
        alertDialogBuilder.setView(promptsView);
        final EditText userInput = (EditText) promptsView
                .findViewById(R.id.editTextDialogUserInput);
        userInput.setText(resultMobile);
        userInput.setEnabled(false);
btnCancel.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

            }
        });
2
gyan awasthi

Ma solution pour votre question. 

 LayoutInflater layoutInflater = LayoutInflater.from(this);
 View promptView = layoutInflater.inflate(R.layout.Prompt, null);

 AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
 alertDialogBuilder.setView(promptView);

 Button btn_1= (Button)promptView.findViewById(R.id.btnAdd1);
 btn_1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

           //do required function
           // don't forget to call alertD.dismiss()

        }
    });


 Button btn_2 = (Button)promptView.findViewById(R.id.btnAdd2);
 btn_2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

           //do required function

        }
    });


alertDialogBuilder
        .setCancelable(false)



AlertDialog alertD = alertDialogBuilder.create();
alertD.show();
0
Thein Naing Oo