Не могу использовать onDismiss () при использовании пользовательских диалогов - Android - PullRequest
10 голосов
/ 07 февраля 2011

Я работаю над небольшой программой, и мне нужно добавить пользовательский диалог, который передает некоторую информацию об активности вызова при закрытии.Я расширил класс диалога, и когда я пытаюсь перехватить пользовательское диалоговое окно, когда оно закрывается, с помощью прослушивателя onDismiss, оно никогда не достигает его, потому что я использовал настраиваемое диалоговое окно.

Это часть моей деятельности -

    .
    .
    .
       attributes customizeDialog = new attributes(con,position,pick.getLastVisiblePosition());
        customizeDialog.show();

(Атрибуты - это имя класса, расширяющего класс диалога).

Вот прослушиватель событий, который я настроил, когда диалог завершился -

    customizeDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {

        @Override
        public void onDismiss(DialogInterface dialog) {
            Log.v("LOG_CAT",attributes.selectedIndexes.get(0) + " " + attributes.selectedIndexes.get(1) + " " + attributes.selectedIndexes.get(2) + " " + attributes.selectedIndexes.get(3) + " " + attributes.selectedIndexes.get(5) + " ");
    }

});

Я знаю, что делаю это неправильно, я просто не знаю, как это исправить.

Буду очень признателен за любую помощь в решении этой проблемы.

Спасибо!

Ответы [ 6 ]

16 голосов
/ 07 февраля 2011

Я склоняюсь к тому, чтобы в моей деятельности были такие слушатели ...

public class MyActivity extends Activity
    implements DialogInterface.OnDismissListener {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        attributes customizeDialog = new attributes(con,position,pick.getLastVisiblePosition());
        customizeDialog.setOnDismissListener(this);
        customizeDialog.show();
    }

    @Override
    public void onDismiss(DialogInterface dialog) {
        // Do whatever
    }
}
5 голосов
/ 07 февраля 2011

Вы могли бы, чтобы ваша вызывающая деятельность реализовала пользовательский интерфейс слушателя, который вызывается при закрытии диалога:

public interface MyDialogListener {
    void OnCloseDialog();
}

public class MyActivity implements MyDialogListener {
    public void SomeMethod() {
        MyDialog myDialog = new MyDialog(this, this);
        myDialog.show();
    }

    public void OnCloseDialog() {
        // Do whatever you want to do on close here
    }

}

public class MyDialog extends Dialog {
    MyDialogListener mListener;

    public MyDialog (Context context, MyDialogListener listener) {
        super(context, R.style.Dialog);
        mListener = listener;
    }

    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.CloseButton:
                mListener.OnCloseDialog();
                dismiss()
                break;
            default:
                //...
        }
    }
}

Это особенно полезно, если вы хотите отправить сообщение обратно вызывающему абоненту в любое другое время, кроме случаев увольнения.

1 голос
/ 07 февраля 2019

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

 new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
           dialog.dismiss();
        }
    }, 1500);
1 голос
/ 01 сентября 2013

И если вы хотите иметь какое-то сохранение внутри диалогового окна, снова, вы должны использовать onDicmissListener, поскольку для пользовательских диалогов onDismiss не вызывается по умолчанию:

public class CustomDialog extends Dialog implements DialogInterface.OnDismissListener {

    public CustomDialog(Context context) {
        super(context);
        setupLayout(context);
    }

    public CustomDialog(Context context, int theme) {
        super(context, theme);
        setupLayout(context);
    }

    protected CustomDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {
        super(context, cancelable, cancelListener);
        setupLayout(context);
    }

    private void setupLayout(Context context) {
        this.context = context;
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.custom_dialog);
        WindowManager.LayoutParams params = getWindow().getAttributes();
        params.width = WindowManager.LayoutParams.FILL_PARENT;
        getWindow().setAttributes(params);

        setOnDismissListener(this);

        loadPreferences();
    }

    private void loadPreferences() {
      // ...
    }

    private void savePreferences() {
       // ...
    }

    @Override
    public void onDismiss(DialogInterface dialogInterface) {
        savePreferences();
    }
}
0 голосов
/ 06 сентября 2017

Чтобы добавить диалог внутри класса CustomDialog:

public class MessageBoxDialog extends Dialog implements DialogInterface.OnDismissListener
{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
         ...
         setOnDismissListener(this);
         ...
    }

    @Override
    public void onDismiss(DialogInterface dialogInterface) {

    }
}
0 голосов
/ 29 октября 2012

Следует помнить, что OnDismissListener прислушивается к закрытию дочерних процессов.Родителю диалогового окна вашего клиента требуется onDismissListener, а не само диалоговое окно.

"Интерфейс, позволяющий создателю диалога запускать некоторый код при закрытии диалогового окна."

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...