оповещение о диалоговом окне Android

#android #android-alertdialog #toast

#Android #android-alertdialog #тост

Вопрос:

я использую файл макета для отображения диалогового окна. Мой XML-файл

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent" android:orientation="vertical">
    <EditText android:id="@ id/dialogEditText" android:text="Enter Your Text Here" android:layout_height="wrap_content" android:layout_width="match_parent"></EditText>
    <DatePicker android:id="@ id/datPicker" android:layout_height="wrap_content" android:layout_width="match_parent" ></DatePicker>
    <LinearLayout android:id="@ id/linearLayout1" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal">
     <Button android:text="Add" android:id="@ id/dialogAddBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true"></Button>
     <Button android:text="Cancel" android:id="@ id/dialogCancelBtn" android:layout_width="200px" android:layout_height="wrap_content" android:layout_centerHorizontal="true"></Button>
    </LinearLayout>
</LinearLayout>
  

Я хочу что-то сделать, когда пользователь нажимает на кнопку «ОК» или «Отмена». Итак, я создал анонимные обработчики для этих кнопок. Мое кодирование

 LayoutInflater inflater = LayoutInflater.from(obj);
            View inflatedView1= inflater.inflate(R.layout.dialog_view,null);

             final Dialog d= new Dialog(obj);
             final Window window= d.getWindow();
             window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND, WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
             window.setTitle("Add Item");
             window.setContentView(R.layout.dialog_view);

             final EditText input= (EditText) inflatedView1.findViewById(R.id.dialogEditText);
             Button okBtn= (Button)inflatedView1.findViewById(R.id.dialogAddBtn);
             okBtn.setOnClickListener(new OnClickListener() {

                    public void onClick(View v) {
                        Toast msg= Toast.makeText(obj.getApplicationContext(),"Hello",Toast.LENGTH_LONG);
                        msg.show();
                    }
                });

             Button cancelBtn= (Button) inflatedView1.findViewById(R.id.dialogCancelBtn);
             cancelBtn.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                    d.dismiss();
                }
            });
            d.show(); 
  

Когда я нажимаю «Ок» или «Кнопка отмены», ничего не происходит. Я не могу понять, почему это происходит.
Пожалуйста, предложите мне какое-нибудь решение.

Ответ №1:

вы настраиваете обработчики событий в своем расширенном представлении, но в то же время настраиваете представление содержимого на обычный макет:

 window.setContentView(R.layout.dialog_view);
  

Просто измените эту строку на

 window.setContentView(inflatedView1);
  

Или, возможно, лучшим подходом без использования layout inflater было бы использовать

 d.setContentView(R.layout.dialog_view);
  

А затем настройка обработчиков событий с помощью

 Button okBtn = (Button) d.findViewById(R.id.dialogAddBtn);
okBtn.setOnClickListener(...
  

Майкл

Комментарии:

1. Спасибо, друг, я тебе очень благодарен. На самом деле я новичок в Android. Спасибо, брат…….

2. Ну, я тоже : D Но как только вы натыкаетесь на эти мелочи, вы их запоминаете 😉