Я определил следующее пользовательское диалоговое окно:
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);
getWindow().setLayout(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
}
}
В диалоговом окне используется следующая раскладка, содержащая только кнопку «Отклонить меня»:
<?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>
Моя MainActivity
отображает кнопку triggerDialogBtn
, которая покажет мой диалог при нажатии.Я также определил метод-обработчик для кнопки dismiss_btn
в моем диалоговом окне, который предназначен для закрытия моего диалога при нажатии.
public class MainActivity extends Activity{
private Button triggerDialogBtn;
private MyDialog myDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//initialize my dialog
myDialog = new MyDialog(this);
//the button which will trigger the dialog to pop up
Button triggerDialogBtn = (Button)findViewById(R.id.trigger_btn);
triggerDialogBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
myDialog.show(); //my dialog pop up
}
});
// I would like to dismiss my dialog when the "Dismiss me" button on the dialog is pressed
/**** BUT I GOT NULL POINTER EXCEPTION HERE ******/
//This is the "Dismiss me" button defined on dialog layout
Button dismissMeBtn = (Button)findViewById(R.id.dismiss_btn);
dismissMeBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
myDialog.dismiss();
}
});
}
}
Макет main.xml
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!-- The trigger button which will pop up my dialog when pressed -->
<Button
android:id="@+id/trigger_btn"
android:layout_width="80dip"
android:layout_height="20dip"
android:text="Trigger dialog" />
</LinearLayout>
проблема в том, что если я определяю обработчик щелчка для dismiss_btn
(который находится в моем диалоговом окне) внутри MainActivity
, я не могу закрыть диалоговое окно при нажатии dismiss_btn
;это всегда выбрасывает NullPointerException
.
Итак, где и как я могу определить обработчик для закрытия моего диалога при нажатии кнопки в моем диалоге?
ОБНОВЛЕНО
Я также попытался поместить обработчик dismiss_btn
в свой класс пользовательского диалогового окна, как показано ниже:
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: 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) {
???.dismiss(); // What should replace "???"
}
});
getWindow().setLayout(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
}
}
Я получаю указанную ошибку, не знаючем заменить вопросительные знаки на