#android #android-alertdialog
#Android #android-alertdialog
Вопрос:
У меня возникли проблемы с закрытием моего диалогового окна оповещения. Я использую layout inflator для создания диалогового окна, поэтому я не уверен, как я буду закрывать это после того, как закончу с этим. Код приведен ниже:
AlertDialog.Builder dialog = new AlertDialog.Builder(AddData.this);
DialogInterface dia = new DialogInterface();
//Create a custom layout for the dialog box
LayoutInflater inflater = (LayoutInflater)AddData.this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.add_rep_1_set, parent, false);
TextView title = (TextView)layout.findViewById(R.id.rep_1_title);
Button add_item = (Button)layout.findViewById(R.id.add_button);
add_item.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
//Need this to close the alert dialog box
}
});
title.setText(workout_items[position]);
dialog.setView(layout);
dialog.show();
Я не могу вызвать finish, потому что это закрывает listview, из которого запускается диалоговое окно alert, и вызовы dialog.dismiss для меня недоступны.
Как ты думаешь, что я должен сделать, чтобы это исправить?
Ответ №1:
AlertDialog.Builder dialog = new AlertDialog.Builder(AddData.this);
DialogInterface dia = new DialogInterface();
//Create a custom layout for the dialog box
LayoutInflater inflater = (LayoutInflater)AddData.this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.add_rep_1_set, parent, false);
TextView title = (TextView)layout.findViewById(R.id.rep_1_title);
Button add_item = (Button)layout.findViewById(R.id.add_button);
title.setText(workout_items[position]);
dialog.setView(layout);
AlertDialog alertDialog = dialog.create();
add_item.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
alertDialog.dismiss();
}
});
alertDialog.show();
Комментарии:
1. Доступ к переменной AlertDialog осуществляется из внутреннего класса. Должно быть объявлено окончательным.
2. Для чего это
DialogInterface dia
?
Ответ №2:
Попробуйте это:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater inflater = getLayoutInflater();
View dialogView = inflater.inflate(R.layout.brush_opts_dialog,null);
builder.setView(dialogView);
closeBtn = (Button)dialogView.findViewById(R.id.close_btn);
final AlertDialog dialog = builder.create();
closeBtn .setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
Вы должны использовать AlertDialog.Конструктор для «сборки» самого диалогового окна оповещения. Затем вызовите метод create() в AlertDialog.Объект Builder. Этот метод возвращает объект AlertDialog, который позволяет вызвать dismiss().
Вам не нужно создавать его несколько раз или использовать какие-либо объекты DialogInterface. У меня это работает. Дайте мне знать, как это происходит у вас.
Комментарии:
1. Ваше объяснение для вызова create () было тем, что я искал.
Ответ №3:
сделайте это следующим образом,
add_item.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
dialog.dismiss();
}
});
Ответ №4:
я изменил ваш код, пожалуйста, проверьте..
AlertDialog.Builder dialog = new AlertDialog.Builder(AddData.this);
DialogInterface dia = new DialogInterface();
//Create a custom layout for the dialog box
LayoutInflater inflater = (LayoutInflater)AddData.this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.add_rep_1_set, parent, false);
TextView title = (TextView)layout.findViewById(R.id.rep_1_title);
Button add_item = (Button)layout.findViewById(R.id.add_button);
final AlertDialog Dial = alertDialog.create();
title.setText(workout_items[position]);
Dial.setView(layout);
AlertDialog alertDialog = dialog.create();
add_item.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Dial.dismiss();
}
});
Dial.show();
Только что добавлено
окончательный набор AlertDialog = AlertDialog.create(); и измените dialog.setView(layout); на Dialog.setView(layout);
теперь просто вызовите Dial.dismiss(); в onclick listener.. у меня все работает нормально.
Комментарии:
1. @Abdus.. ПОЧЕМУ ВЫ вызываете create(); два раза?
Ответ №5:
используйте этот код в своем классе:
Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.custom);
((Button) dialog.findViewById(R.id.button))
.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
и создать custom.xml затем вставьте в него этот код:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:id="@ id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" Ok "/>
</RelativeLayout>
источник: https://www.mkyong.com/android/android-custom-dialog-example /
и если вам не нравится приведенный выше код, смотрите ссылку ниже:http://thedeveloperworldisyours.com/android/prevent-alertdialog-closing-button-clicked /
Ответ №6:
Попробуйте dialog.cancel(); в вашем прослушивателе onclick. Это должно сработать.
Ответ №7:
Вам необходимо реализовать DialogInterface.OnClickListener вместо просмотра.OnClickListener. затем будет доступен dialog.dismiss().
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which){
dialog.dismiss();
}
}
Ответ №8:
Вы получаете ошибку, попробуйте этот код
dialog.setView(layout);
final AlertDialog alertDialog = dialog.create();
add_item.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v)
{
if (alertDialog != null amp;amp; alertDialog.isShowing()) {
alertDialog.dismiss();
}
}
});
alertDialog.show();
Ответ №9:
final viewProgressDialogue viewProgressDialogue = new viewProgressDialogue(DebugActivity.this);
viewProgressDialogue.show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Log.d("response","im calling");
viewProgressDialogue.dismiss();
}
}, 5000);
> Make it one Instance so that it will work It Will in the Fragment too. for Fragment Use
final viewProgressDialogue viewProgressDialogue = new viewProgressDialogue(getActivity());
viewProgressDialogue.show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Log.d("response", "im calling");
viewProgressDialogue.dismiss();
}
}, 5000);
> viewProgressDialogue Class
public class viewProgressDialogue extends Dialog {
public viewProgressDialogue(@NonNull Context context) {
super(context);
WindowManager.LayoutParams wlmp = getWindow().getAttributes();
getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
wlmp.gravity = Gravity.CENTER_HORIZONTAL;
getWindow().setAttributes(wlmp);
setTitle(null);
setCancelable(false);
setOnCancelListener(null);
View view = LayoutInflater.from(context).inflate(
R.layout.custom_progress, null);
setContentView(view);
}
}
Ответ №10:
В приведенных выше ответах есть небольшое изменение, которое просто проверяет, что если вы написали AlertDialog AlertDialog = builder.create(); перед методом builder.setView(…);, то просто напишите его после builder.setView(…);
Ответ №11:
Попробуйте это:
btn_go_anyway.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
getDialog().dismiss();
}
});