#java #android
#java #Android
Вопрос:
Я делаю следующее: в зависимости от количества акций, которые необходимо ввести, я создаю диалоговое окно EditText.
Например, если я введу число 5 в наличии:
IMG: https://i.stack.imgur.com/iP4YL.jpg
Я создаю диалоговое окно 5 раз, в котором вы вводите сведения, и где заголовок будет меняться по мере ввода данных.
IMG: https://i.stack.imgur.com/rhE60.jpg
Чего я не понимаю, так это того, как я хочу, чтобы заголовок отображался:
- Продукт 1/5, продукт 2/5, продукт 3/5, продукт 4/5, продукт 5/5.
На самом деле я получаю следующее:
- Продукт 5/5, продукт 4/5, продукт 3/5, продукт 2/5, продукт 1/5.
Я также хочу показать всплывающее окно после добавления конечного продукта. Проблема в том, что всплывающее окно отображается сразу после события Click.
Мой код выглядит следующим образом:
btnContinuar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int stock = Integer.parseInt(input_layout_stock.getEditText().getText().toString());
for(int i = 1 ; i <= stock ; i ){
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setTitle("Producto " i "/" stock);
//builder.setMessage("Agregar");
builder.setView(R.layout.dialog_add_product);
builder.setView(inflater.inflate(R.layout.dialog_add_product, null));
builder.setPositiveButton("Continuar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
builder.create();
if(i == 5){
Toast.makeText(getActivity(), "Se agregaron " stock " productos con éxito.", Toast.LENGTH_SHORT).show();
}
}
}
});
Ответ №1:
for
Цикл не ждет, пока диалоговое окно будет закрыто, чтобы создать следующее, поэтому второе диалоговое окно перекрывает первое, а третье перекрывает второе и так далее. Что вам нужно сделать, это показать каждое диалоговое окно в onDismiss
обратном вызове предыдущего диалогового окна.
Я упростил код для использования в качестве примера. Вы можете добавить остальную часть своего кода туда, где вам это нужно.
private int current = 1; // Global variable
final int stock = Integer.parseInt("5");
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Producto " current "/" stock);
builder.setPositiveButton("Continuar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
if (current < stock) {
current ;
// TODO Create your next dialog here.
builder.setTitle("Producto " current "/" stock);
builder.show();
} else {
// This was the last dialog. Show Toast.
Toast.makeText(getActivity(), "Se agregaron " stock " productos con éxito.", Toast.LENGTH_SHORT).show();
current = 1;
}
}
});
builder.show();
Комментарии:
1. Большое вам спасибо! Это сработало, но когда я ввожу новое значение в stock, диалоговое окно продолжает подсчет, а не начинается с 1. Например, если я ввел сначала «5» в наличии, а затем ввел «10». Непрерывный диалог от 5 до 10.
2. Вы должны сбросить значение
current
в предложении else . Пожалуйста, проверьте отредактированный ответ (после всплывающего окна).
Ответ №2:
Если я правильно читаю это, вы хотите начать с продукта 1/5, затем перейти к продукту 5/5, но вы получаете продукт 5/5 вплоть до продукта 1/5, правильно?
Если это так, то причина, по которой вы сначала получаете 5/5, заключается в том, что это последнее созданное диалоговое окно (оно охватывает предыдущие диалоговые окна), и всплывающее окно создается, потому что оно находится в цикле. Цикл продолжается, даже если пользователь ничего не ввел.