Почему я не могу установить onClickListener для кнопки в диалоговом окне? - PullRequest
2 голосов
/ 07 июля 2011

У меня есть собственный диалог, который описан ниже.

Макет My Custom Dialog (* my_dialog.xml *), который содержит только кнопку «отклонить»:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"

     >

         <Button
            android:id="@+id/dismiss_btn"
            android:layout_width="100dip"
            android:layout_height="30dip"
            android:layout_centerHorizontal="true"
            android:text="Dismiss me"
            android:textSize="8dip"
            android:textColor="#ffffff"
             />
     </RelativeLayout>

мой класс просмотра диалогов:

 public class MyDialog extends Dialog{

        public MyDialog(Context context){
            super(context);
        }


        @Override
        protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.my_dialog);

                 Button dismissMeBtn = (Button)findViewById(R.id.dismiss_btn);

                /** ERROR Message when set onClickListener below (throw by eclipse editor)**/

               //     The method setOnClickListener(View.OnClickListener) in the 
                //    type View is not applicable for the arguments (new DialogInterface.OnClickListener(){})

                dismissMeBtn.setOnClickListener(new OnClickListener() { 
                    @Override
                    public void onClick(View v) {
                         MyDialog.this.dismiss(); 
                    }
                  });

            getWindow().setLayout(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        }


    }

Как и в коде, указанном выше, у меня есть кнопка "* dismiss_btn *" в диалоговом окне, я хотел бы закрыть диалоговое окно при нажатии кнопки отклонения, но я получил ошибку в своем коде когда setOnClickListener для кнопки отклонения (как указано в коде).

Сообщение об ошибке (ошибка, выдаваемая редактором Eclipse):

Метод setOnClickListener (View.OnClickListener) в типе View не применим для аргументов (новый DialogInterface.OnClickListener () {})

Почему я получил ошибку? Почему я не могу установить onClickListener для кнопки в диалоговом окне?

Ответы [ 3 ]

27 голосов
/ 07 июля 2011

Поскольку eclipse считает, что это DialogInterface onClickListener, но вам нужен View onClickListener, поэтому он будет

                dismissMeBtn.setOnClickListener(new View.OnClickListener() { 
                @Override
                public void onClick(View v) {
                     MyDialog.this.dismiss(); 
                }
              });
1 голос
/ 07 июля 2011

Это потому, что вы находитесь в контексте DialogInterface и он имеет OnClickListener интерфейс самостоятельно.

Ваш код должен быть:

dismissMeBtn.setOnClickListener(new View.OnClickListener() { 
    @Override
    public void onClick(View v) {
         MyDialog.this.dismiss(); 
    }
});
0 голосов
/ 07 июля 2011

Кажется, у вас проблемы с импортом.Когда вы пытаетесь создать новый OnClickListener, вы вызываете конструктор DialogInterface.OnClickListener, который не является необходимым OnClickListener для кнопки (вероятно, из-за import android.content.DialogInterface.OnClickListener)

Попробуйте использовать new View.OnclickListener(){ ... }замените импорт на import android.view.View.OnClickListener, и это должно быть как раз.

...