Android - последовательные / вложенные диалоговые окна, второе диалоговое окно закрывает первое
У меня есть приложение, которое при нажатии кнопки появляется диалоговое окно, содержащее список, и после выбора определенного элемента в списке, появляется диалоговое окно выбора номера. Я хочу, чтобы после того, как пользователь выбрал число в диалоговом окне выбора номера, закрывается только диалоговое окно выбора номера , оставляя диалоговое окно все еще активным.
Это мой код до сих пор.
Это код для первого диалогового окна (со списком):
private void generateUnitDialog(String[] productUnit) {
final CharSequence[] items = productUnit;
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Make your selection");
builder.setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Handle Confirm action here
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Handle cancel action here
}
});
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
// Do something with the selection
Toast.makeText(getApplicationContext(),
"Item Click detected", Toast.LENGTH_SHORT)
.show();
generateQuantityDialog();
}
});
builder.setCancelable(false);
AlertDialog alert = builder.create();
alert.show();
}
Когда выбран определенный элемент списка, появляется диалоговое окно выбора номера с использованием этого кода:
public int generateQuantityDialog(){
final Dialog d = new Dialog(com.angelo.orderform.OrderForm.this);
d.setTitle("Choose Quantity");
d.setContentView(R.layout.dialog);
Button b1 = (Button) d.findViewById(R.id.button1);
Button b2 = (Button) d.findViewById(R.id.button2);
final NumberPicker np = (NumberPicker) d.findViewById(R.id.numberPicker1);
np.setMaxValue(100000);
np.setMinValue(1);
np.setWrapSelectorWheel(true);
//np.setOnValueChangedListener(this);
b1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//tv.setText(String.valueOf(np.getValue()));
d.dismiss();
}
});
b2.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
d.dismiss();
}
});
d.show();
return(np.getValue());
}
После того, как пользователь выбирает определенное число, диалоговое окно выбора номера закрывается так же, как и окно со списком. Я хочу, чтобы диалог со списком оставался включенным.
Видимо, setCancellable(false) не помогает.
Есть идеи? Даже если это другой подход, у меня открытые уши.
3 ответа
Хорошо, я понял это, но я думаю, что это плохая практика.
Что я сделал, я поместил код, который генерирует диалоговое окно выбора номера и поместил его туда, где generateQuantityDialog()
изначально был и только что назван builder.show()
после d.dismiss()
,
Я буду искать обходной путь, отказываясь от этого подхода.
Вы должны установить AlertDialog alert
переменная глобальная.
согласно вашему требованию вы можете отменить или отклонить alertdialog
,
b1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//tv.setText(String.valueOf(np.getValue()));
d.dismiss();
alert.dismiss() ; or
alert.cancel();
}
});
Вы можете отклонить alertDialog согласно вашему требованию.
как, если выбрать второй диалог.
public class MainActivity extends Activity {
Dialog d;
AlertDialog.Builder builder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final CharSequence[] items = {"a","b","c"};
builder = new AlertDialog.Builder(this);
builder.setTitle("Make your selection");
builder.setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Handle Confirm action here
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Handle cancel action here
}
});
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
// Do something with the selection
Toast.makeText(getApplicationContext(),
"Item Click detected", Toast.LENGTH_SHORT)
.show();
generateQuantityDialog();
}
});
builder.setCancelable(false);
AlertDialog alert = builder.create();
alert.show();
}
public int generateQuantityDialog(){
d = new Dialog(this);
d.setTitle("Choose Quantity");
d.setContentView(R.layout.al);
Button b1 = (Button) d.findViewById(R.id.button1);
Button b2 = (Button) d.findViewById(R.id.button2);
// final NumberPicker np = (NumberPicker) d.findViewById(R.id.timePicker1);
// np.setMaxValue(100000);
// np.setMinValue(1);
// np.setWrapSelectorWheel(true);
//np.setOnValueChangedListener(this);
b1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//tv.setText(String.valueOf(np.getValue()));
d.dismiss();
AlertDialog alert = builder.create();
alert.show();
}
});
b2.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
d.dismiss();
AlertDialog alert = builder.create();
alert.show();
}
});
d.show();
return(54);
}
}