2011-02-06 61 views
9

我正在开发一个小程序,我需要添加一个自定义对话框,它在关闭时将一些信息传递给调用活动性。 我扩展了对话框类,当我尝试在关闭时捕获自定义对话框时,使用onDismiss侦听器,它永远不会触及它,因为我使用了自定义对话框。使用自定义对话框时无法使用onDismiss() - Android

这是我的活动的一部分 -

. 
    . 
    . 
     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) + " "); 
    } 

}); 

我知道我做错了,我只是不知道如何解决它。

我真的很感谢这个问题的任何帮助。

谢谢!

+1

您是否缺少对自定义对话框类中的某个超级方法的调用?这是常见的罪魁祸首,当你在一个自定义类期待的事件没有发生。 – 2011-02-06 22:35:06

+0

Hey Tofira我使用了相同的代码,它使用得很好。也许你错过了别的东西? – 2011-07-10 05:01:36

回答

16

我倾向于有我的活动实现这样的听众......

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

你可以有你的电话活动实现自定义的监听器接口时调用的对话框关闭:

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: 
       //... 
     } 
    } 
} 

如果您想在除解雇之外的任何其他时间将内容发送回主叫方,此功能尤其有用。

0

有一点要记住的是,OnDismissListener正在倾听对子进程的解雇。您客户对话的父母需要onDismissListener,而不是对话本身。

“用于允许对话创建者在对话被解除时运行一些代码的接口。”

1

如果你想拥有某种形式的对话里面保存的,同样,你必须使用自定制对话框onDicmissListeneronDismiss默认是不叫:

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

要添加CustomDialog类的内部对话:

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

    @Override 
    public void onDismiss(DialogInterface dialogInterface) { 

    } 
}