Вот соответствующий код:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case SORT_MENU:
showDialog(ORDER_DIALOG);
showDialog(COLUMNS_DIALOG);
String orderBy = bundle.getString("column") + bundle.getString("order");
break;
}
return false;
}
@Override
protected Dialog onCreateDialog(int id) {
Dialog dialog;
final String[] columns = { "title", "completed" };
final String[] order = { "Ascending", "Descending" };
switch (id) {
case COLUMNS_DIALOG:
AlertDialog.Builder columnBuilder = new AlertDialog.Builder(this);
columnBuilder.setTitle("Columns");
columnBuilder.setItems(columns, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
bundle.putString("column", columns[which]);
dialog.dismiss();
}
});
dialog = columnBuilder.create();
break;
case ORDER_DIALOG:
AlertDialog.Builder orderBuilder = new AlertDialog.Builder(this);
orderBuilder.setTitle("Order");
orderBuilder.setItems(order, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String orderS;
if (order[which].equalsIgnoreCase("Ascending"))
orderS = "ASC";
else
orderS = "DESC";
bundle.putString("order", orderS);
dialog.dismiss();
}
});
dialog = orderBuilder.create();
break;
default:
dialog = null;
break;
}
return dialog;
}
Я знаю, что диалог является асинхронным из основного потока пользовательского интерфейса. Итак, звонки, подобные этим:
showDialog(ORDER_DIALOG);
showDialog(COLUMNS_DIALOG);
String orderBy = bundle.getString("column") + bundle.getString("order");
Только в результате orderBy
будет нулевым. Есть ли способ заставить orderBy
дождаться окончания обоих диалогов? Даже если dialog.isShowing()
равно false, это может быть связано с тем, что диалог уже завершен или даже не запущен.