it-swarm.com.de

Wie kann ich benutzerdefinierte Schaltflächen zu einem AlertDialog-Layout hinzufügen?

Ich habe einen AlertDialog mit positiven und negativen Schaltflächen. Im AlertDialog-Layout habe ich EditText und zwei Buttons (btnAdd1, btnAdd2). Ich möchte, wenn der Benutzer auf den Button btnAdd1 oder btnAdd2 klickt, um denselben Text in AlertDialog zu EditText hinzuzufügen (aber kein AlertDialog zu schließen). Ist dies in AlertDialog möglich oder muss ich nur Dialog verwenden? 

Dies ist das Layout (R.layout.Prompt) von 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>

Und das ist Quellcode:

    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();

Ich möchte Zugriff auf die BtnAdd1 und BtnAdd2 aus dem Layout erhalten. Setzen Sie den OnClickListener () auf diese beiden Schaltflächen.

22
Pepa Zapletal

Mit dem folgenden Code wird eine Ansicht von R.layout.Prompt aufgeblasen und auf AlertDialog gesetzt. Die Schaltflächen positive und negative werden nicht verwendet. Sie können das onClick-Verhalten für btnAdd1 und btnAdd2 einstellen:

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

was du machen willst ist

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

verwenden der Ansicht zum Aufrufen von findViewById anstelle der Aktivität, die nach der ID im angezeigten Layout sucht.

4
jcw

Nach diesem Ansatz kann ich die Bildschaltfläche erstellen, aber wenn ich den Dialog auf Abbrechen abbrechen oder abbrechen möchte, muss ich das tun, was ich tun muss.

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

Meine Lösung für Ihre Frage. 

 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