Android диалог оповещения - PullRequest
0 голосов
/ 06 апреля 2011

Я использую файл макета для отображения диалога. Мой 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 Ответ

1 голос
/ 06 апреля 2011

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

window.setContentView(R.layout.dialog_view);

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

window.setContentView(inflatedView1);

Или, возможно, лучшим подходом без использования инфлатера макета будет использование

d.setContentView(R.layout.dialog_view);

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

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

Michael

...