#android-studio
#android-studio
Вопрос:
итак, у меня есть приложение с тремя разными кнопками (родительскими кнопками), при нажатии на любую из них отображается диалоговое окно пользовательского оповещения с 9 разными кнопками, но функции этих 9 кнопок в диалоговом окне оповещения различаются в зависимости от того, какая из трех родительских кнопок ее вызвала. При нажатии любой из 9 кнопок я хочу, чтобы приложение выполняло определенную функцию, а затем закрывало alertdialog. Теперь проблема в том, что я могу легко вызвать диалоговое окно оповещения, вызвав созданный мной метод showcustomdialog();
, но я не могу отклонить его, используя alertdialog.dismiss();
внутри OnClickListener родительской кнопки, поскольку метод имеет тип результата void . Я пытался использовать операторы if-else, но это не работает. Как я могу добиться того, что требуется?
Метод:
private void showCustomDialog() {
ViewGroup viewGroup = findViewById(android.R.id.content);
View dialogView = LayoutInflater.from(this).inflate(R.layout.dialog_main2, viewGroup, false);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(dialogView);
final AlertDialog alertDialog = builder.create();
alertDialog.show();
}
Я вызываю meathod и использую его следующим образом:
parentbutton1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showCustomDialog();
alertbutton1.getId();
alertbutton1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
textView1.setText("500");
function();
//I want to dismiss the alertdialog here.
}
});
alertbutton2.getId();
alertbutton2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
textView1.setText("1000");
function();
//I want to dismiss the alertdialog here.
}
});
и так далее.
Комментарии:
1. Вы пытались вызвать dismiss(); ?
2. Это не сработает, потому что, как я уже упоминал, метод showcustomdialog() имеет тип результата void, я хочу вызвать функцию dismiss вне метода showcustomdialog() .
3. откуда вы взяли
alertbutton1
? Является ли это частью диалогового окна?4. да, это часть диалогового окна. Я мог бы установить onClickListeners для кнопок в
showcustomdialog()
методе, но, как я уже упоминал, их функция отличается в зависимости от того, какая родительская кнопка вызывает alertdialog, поэтому это не вариант.5. Но alertButton1 не является частью представления, которое было добавлено в AlertDialog. как вы инициализировали alertButton1?
Ответ №1:
Я нашел решение для вас, используя AlertDialog.
parentbutton1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
createDialog();
}
});
Тогда метод ДОЛЖЕН быть частным или общедоступным AlertDialog:
private AlertDialog createDialog() {
LayoutInflater inflater = (getActivity()).getLayoutInflater(); // for fragment or getLayoutInflater(); for activity
View v = inflater.inflate(R.layout.dialog_add_new_list, null);
Button okButton = v.findViewById(R.id.confirm_button);
Button cancelButton = v.findViewById(R.id.cancel_button);
final AlertDialog dialog = new AlertDialog.Builder(getActivity()) // for fragment or AlertDialog.Builder ( this ) for activity
.setView(v)
.show();
okButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
cancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View p1) {
dialog.dismiss();
}
});
return dialog;
}
PS Замените идентификаторы, которые я использовал для создания этого примера, на ваши.