Найти родительский диалог кнопки - PullRequest
3 голосов
/ 02 сентября 2010

У меня есть диалоговое окно с предупреждением, которое содержит кнопку. Кнопка определена в некотором XML, а макет устанавливается с помощью Dialog.setContentView ().

Кнопка имеет класс слушателя, и я хочу знать, как, если вообще, я могу получить доступ к диалогу из метода onClick (View v).

Причина этого в том, что я просто хочу закрыть диалоговое окно - поэтому, если есть более простой / лучший способ сделать это, это было бы полезно знать!

Ответы [ 3 ]

1 голос
/ 02 сентября 2010

Простое решение с использованием метода onCreateDialog() из класса Activity:

// member variable
Dialog mDialog;

protected Dialog onCreateDialog(int id) {
    Builder builder = new AlertDialog.Builder(mContext);
    switch (id) {
        case DELETE_ALL_DIALOG:
            builder.setCancelable(false);
            builder.setPositiveButton(R.string.ok, new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    //do what you want
                }
            });
            builder.setNegativeButton(R.string.cancel, new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dismissDialog(DELETE_ALL_DIALOG); // thats what you are looking for
                }
            });
            builder.setMessage(R.string.delete_all_bookmarks_question);
            mDialog = builder.create();
            mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            return mDialog;
        default:
            return super.onCreateDialog(id);
    }
}
0 голосов
/ 02 сентября 2010

Пока я просто передал ссылку на диалог в класс слушателя, а затем вызвал dismiss () в соответствующее время.

Это не самый лучший способ - есть ли лучший?

Мне кажется, что создание собственного диалога не нужно ... Ничего необычного не требуется.

0 голосов
/ 02 сентября 2010

Создайте собственный класс диалога и определите кнопку там. Что-то вроде:

public class CustomizeDialog extends Dialog implements OnClickListener {
    Button okButton;

    public CustomizeDialog(Context context) {
        super(context);
        /** 'Window.FEATURE_NO_TITLE' - Used to hide the title */
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        /** Design the dialog in main.xml file */
        setContentView(R.layout.main);
        okButton = (Button) findViewById(R.id.OkButton);
        okButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        /** When OK Button is clicked, dismiss the dialog */
        if (v == okButton)
            dismiss();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...