Android отображает другое диалоговое окно из диалога
Я пытаюсь отобразить диалог из прослушивателя onClick кнопки другого диалога, но второй диалог не будет отображаться. Я искал и нашел аналогичную проблему - Заказ Dialogs в Android, попробовал предоставленное решение, но даже это не работает.
Мой код очень похож на тот, который указан в ответе.
public void onClick (DialogInterface dialog, int id) { ShowDialog (SECOND_DIALOG); dialog.dismiss(); }
любая помощь будет действительно оценена.
Спасибо,
Акшай
Ответы
Ответ 1
Вот как я это делаю:
if (!appPrefs.getAcceptedUsageAggrement()) {
tracker.trackPageView("/UsageAgreementDialog");
acceptedUsage_alertDialog = new AlertDialog.Builder(BroadcastSMSActivity.this)
.setTitle(R.string.accept_usage_title)
.setMessage(R.string.accept_usage_message)
.setNegativeButton(android.R.string.cancel, new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (appPrefs.getAppVer().equals("")) {
tracker.trackEvent("Application", "Install", getAppVerName(), 1);
} else {
tracker.trackEvent("Application", "Upgrade", appPrefs.getAppVer().toString()+"->"+getAppVerName(), 1);
}
displayRecentChanges = true;
appPrefs.saveAppVer(getAppVerName());
appPrefs.saveAcceptedUsageAggrement(true);
// Display Recent Changes on 1st use of new version
if (displayRecentChanges) {
tracker.trackPageView("/RecentChangesDialog");
recentChanges_alertDialog = new AlertDialog.Builder(BroadcastSMSActivity.this)
.setTitle(getString(R.string.changes_title, getAppVerName()))
.setMessage(R.string.changes_dialog)
.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
recentChanges_alertDialog.cancel();
acceptedUsage_alertDialog.cancel();
}
})
.create();
recentChanges_alertDialog.show();
}
}
})
.create();
acceptedUsage_alertDialog.show();
}
Ответ 2
Я знаю, что это было задано некоторое время назад, но здесь было довольно аккуратное решение, которое я нашел.
Я определяю такой интерфейс:
public interface OpenDialog {
public void showDialog(DialogFragment dialog);
}
Какая моя деятельность затем реализуется, передавая ссылку на себя в диалог при ее открытии, используя мой класс InterfaceHolder:
public class MyActivity extends FragmentActivity implements OpenDialog {
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
InterfaceHolder.set(this);
showDialog(new DialogOne());
}
public void showDialog(DialogFragment dialog) {
dialog.show(getSupportFragmentManager(), "tag");
}
InterfaceHolder - это просто класс со статической ссылкой на интерфейс, который я использую для его передачи:
public class InterfaceHolder {
private static OpenDialog openDialog;
public void set(OpenDialog openDialog)
this.openDialog = openDialog;
}
public void get()
return openDialog;
}
Таким образом, метод showDialog отобразит любое диалоговое окно, которое я передаю ему; как вы можете видеть, я делаю это для отображения DialogOne. Теперь, если я хочу открыть новое диалоговое окно "DialogTwo" внутри "DialogOne", я могу вызвать его, написав:
InterfaceHolder.get().showDialog(new DialogTwo());
dismiss();
И отображается voila, DialogTwo. Очевидно, что вам нужно быть осторожным, чтобы ссылка на вашу активность была передана в InterfaceHolder (хороший способ сделать это - поставить InterfaceHolder.set(this) внутри метода showDialog), но в противном случае это, похоже, работает красиво.
Ответ 3
Мое предложение - это код. В диалоговом окне 1 есть кнопка при нажатии на нее, после чего вызывается диалог 2.
private Dialog dialog;
private AlertDialog.Builder voteBuilder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Firat dialog
dialog = new Dialog(QrCodeReader.this);
dialog.setContentView(R.layout.customdialog_qr);
dialog.setCancelable(false);
// Second dialog
showVotingDialog();
//set up button of dialog 1
Button btnVote = (Button) dialog.findViewById(R.id.btnVote);
btnVote.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
voteBuilder.show();
}
});
dialog.show();
}
private void showVotingDialog() {
voteBuilder = new AlertDialog.Builder(this);
voteBuilder.setTitle(R.string.votingdialog_title);
voteBuilder.setCancelable(false);
LayoutInflater inflater = getLayoutInflater();
final View checkboxLayout = inflater.inflate(R.layout.voting_dialog, null);
voteBuilder.setView(checkboxLayout);
voteBuilder.setPositiveButton(R.string.menu_ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
RadioGroup radioGroup = (RadioGroup) checkboxLayout.findViewById(R.id.vote_radiogroup);
int checkedRadioButton = radioGroup.getCheckedRadioButtonId();
int radioButtonSelected = 0;
switch (checkedRadioButton) {
case R.id.vote_item1 : radioButtonSelected = 1; break;
case R.id.vote_item2 : radioButtonSelected = 3; break;
case R.id.vote_item3 : radioButtonSelected = 5; break;
case R.id.vote_item4 : radioButtonSelected = 10; break;
case R.id.vote_item5 : radioButtonSelected = 20; break;
default: radioButtonSelected = 0;
}
sendVoteBySMS(radioButtonSelected);
}
});
voteBuilder.setNegativeButton(R.string.menu_cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
QrCodeReader.this.finish();
}
});
voteBuilder.create();
// voteBuilder.show();
}
Ответ 4
Просто снимите и покажите изображения по диалоговому щелчку