Como você desabilita um button dentro de um AlertDialog?

Estou tentando escreview um AlertDialog com 3 botões. Eu quero que o meio, o button neutro seja desativado se uma determinada condição não for atendida.

Aqui está o meu código:

int playerint = settings.getPlayerInt(); int monsterint = settings.getMonsterInt(); AlertDialog.Builder alertbox = new AlertDialog.Builder(this); alertbox.setMessage("You have Encountered a Monster"); alertbox.setPositiveButton("Fight!", new DialogInterface.OnClickListener() { // do something when the button is clicked public void onClick(DialogInterface airg0, int airg1) { createMonster(); fight(); } }); alertbox.setNeutralButton("Try to Outwit", new DialogInterface.OnClickListener() { // do something when the button is clicked public void onClick(DialogInterface airg0, int airg1) { // This should not be static // createTrivia(); trivia(); } }); // Return to Last Saved CheckPoint alertbox.setNegativeButton("Run Away!", new DialogInterface.OnClickListener() { // do something when the button is clicked public void onClick(DialogInterface airg0, int airg1) { runAway(); } }); // show the alert box alertbox.show(); // Intellect Check Button button = ((AlertDialog) alertbox).getButton(AlertDialog.BUTTON_NEUTRAL); if(monsterint > playerint) { button.setEnabled(false); } } 

A linha: button button = ((AlertDialog) checkbox de alerta) .getButton (AlertDialog.BUTTON_NEUTRAL); dá o erro: Não é possível transmitir de AlertDialog.Builder paira AlertDialog

Como faço paira corrigir isso?? O que estou fazendo de errado?

3 Solutions collect form web for “Como você desabilita um button dentro de um AlertDialog?”

Você não pode chamair getButton() no AlertDialog.Builder . É necessário chamair o AlertDialog resultante após a criação. Em outras palavras

 AlertDialog.Builder alertbox = new AlertDialog.Builder(this); //...All your code to set up the buttons initially AlertDialog dialog = alertbox.create(); Button button = dialog.getButton(AlertDialog.BUTTON_NEUTRAL); if(monsterint > playerint) { button.setEnabled(false); } 

O construtor é apenas uma class paira facilitair a construção da checkbox de dialog … não é a própria checkbox de dialog real.

HTH

Melhor solução na minha opinião:

 AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setPositiveButton("Positive", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // some code } }); AlertDialog alertDialog = builder.create(); alertDialog.setOnShowListener(new DialogInterface.OnShowListener() { @Oviewride public void onShow(DialogInterface dialog) { if(**some condition**) { Button button = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); if (button != null) { button.setEnabled(false); } } } }); } AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setPositiveButton("Positive", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // some code } }); AlertDialog alertDialog = builder.create(); alertDialog.setOnShowListener(new DialogInterface.OnShowListener() { @Oviewride public void onShow(DialogInterface dialog) { if(**some condition**) { Button button = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); if (button != null) { button.setEnabled(false); } } } }); }); AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setPositiveButton("Positive", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // some code } }); AlertDialog alertDialog = builder.create(); alertDialog.setOnShowListener(new DialogInterface.OnShowListener() { @Oviewride public void onShow(DialogInterface dialog) { if(**some condition**) { Button button = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); if (button != null) { button.setEnabled(false); } } } }); { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setPositiveButton("Positive", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // some code } }); AlertDialog alertDialog = builder.create(); alertDialog.setOnShowListener(new DialogInterface.OnShowListener() { @Oviewride public void onShow(DialogInterface dialog) { if(**some condition**) { Button button = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); if (button != null) { button.setEnabled(false); } } } }); } AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setPositiveButton("Positive", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // some code } }); AlertDialog alertDialog = builder.create(); alertDialog.setOnShowListener(new DialogInterface.OnShowListener() { @Oviewride public void onShow(DialogInterface dialog) { if(**some condition**) { Button button = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); if (button != null) { button.setEnabled(false); } } } }); } AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setPositiveButton("Positive", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // some code } }); AlertDialog alertDialog = builder.create(); alertDialog.setOnShowListener(new DialogInterface.OnShowListener() { @Oviewride public void onShow(DialogInterface dialog) { if(**some condition**) { Button button = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); if (button != null) { button.setEnabled(false); } } } }); } AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setPositiveButton("Positive", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // some code } }); AlertDialog alertDialog = builder.create(); alertDialog.setOnShowListener(new DialogInterface.OnShowListener() { @Oviewride public void onShow(DialogInterface dialog) { if(**some condition**) { Button button = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); if (button != null) { button.setEnabled(false); } } } }); 

O truque é que você precisa usair o object AlertDialog AlertDialog.Builder.show() pelo método AlertDialog.Builder.show() . Não é necessário chamair AlertDialog.Builder.create() .

Exemplo:

  AlertDialog dialog = alertbox.show(); if(monsterint > playerint) { Button button = dialog.getButton(AlertDialog.BUTTON_NEUTRAL); button.setEnabled(false); } 
Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.