Не удается использовать onDismiss() при использовании пользовательских диалогов-Android
Я работаю над небольшой программой, и мне нужно добавить пользовательский диалог, который передает некоторую информацию вызывающей acitivity, когда он закрывается. Я расширил класс dialog, и когда я пытаюсь захватить пользовательский диалог, когда он закрывается, используя прослушиватель 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) + " ");
}
});
Я знаю, что я делаю это неправильно,я просто не знаю как это исправить.
Я был бы очень признателен за любую помощь в этой проблеме.
спасибо!
5 ответов
У меня, как правило, есть слушатели реализации моей деятельности, как это...
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
}
}
у вас может быть вызывающее действие реализовать пользовательский интерфейс прослушивателя, который вызывается при закрытии диалога:
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:
//...
}
}
}
Это особенно полезно, если вы хотите отправить вещи обратно в любое другое время, кроме того на увольнение.
и если вы хотите иметь какое-то сохранение внутри диалога, снова, вы должны использовать 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();
}
}
одна вещь, чтобы помнить, что OnDismissListener
прослушивает отклонение дочерних процессов. Родительский диалог вашего клиента нуждается в onDismissListener
, а не сам диалог.
"интерфейс, используемый, чтобы позволить создателю диалога запускать некоторый код, когда диалог отклонен."
чтобы добавить диалог внутри класса CustomDialog:
public class MessageBoxDialog extends Dialog implements DialogInterface.OnDismissListener
{
@Override
protected void onCreate(Bundle savedInstanceState) {
...
setOnDismissListener(this);
...
}
@Override
public void onDismiss(DialogInterface dialogInterface) {
}
}