如何在关闭对话框时更新活动

时间:2015-04-09 20:01:29

标签: android

我正在创建一个自定义对话框类,我在其中扩展默认的Dialog。我在那里做一些工作。用户关闭对话框后,我的活动如何知道对话框已关闭以及是否有时间更新屏幕视图并显示结果?

我是否将我的活动中的实例传递给Dialog类,以便我可以在其上调用公共方法?还是有更好的设计?

谢谢

3 个答案:

答案 0 :(得分:0)

我要做的是:

  1. 创建一个接口,例如:OnDialogCloseListener,其方法名为onDialogClose()
  2. 活动必须实现该接口并覆盖onDialogClose()方法
  3. 在OntialogCloseListener类型的对话框类和构造函数方法中创建属性,并在创建对话框时将活动作为参数传递。

    OnDialogCloseListener listener;
    public MyDialog(OnDialogCloseListener listener) { 
        this.listener = listener;
    }
    
  4. 现在,在Dialog的关闭按钮的onClick方法中调用接口的方法。例如:

     listener.onDialogClose();
    
  5. 最后在您从OnDialogCloseListener覆盖的方法的活动类中,在对话框关闭时执行任何操作。

  6. 注意:您可以在界面中创建所需的所有方法,无论您想要什么,都可以调用它们,不仅在对话框关闭时,您可能还有其他事件需要在引发时进行检查。

    希望能帮到你

答案 1 :(得分:0)

来自文档:http://developer.android.com/guide/topics/ui/dialogs.html

在对话框类中创建一个接口:

public interface NoticeDialogListener {
    public void onDialogPositiveClick(DialogFragment dialog);
    public void onDialogNegativeClick(DialogFragment dialog);
}

在onAttach()中注册一个监听器:

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    // Verify that the host activity implements the callback interface
    try {
        // Instantiate the NoticeDialogListener so we can send events to the host
        mListener = (NoticeDialogListener) activity;
    } catch (ClassCastException e) {
        // The activity doesn't implement the interface, throw exception
        throw new ClassCastException(activity.toString()
                + " must implement NoticeDialogListener");
    }
}

在您的通话活动中实施该界面。

答案 2 :(得分:0)

对话框将覆盖几种在关闭对话框时可感知的方法。包含

 @Override
public void onBackPressed() {
    super.onBackPressed();
}

 @Override
public void setOnCancelListener(@Nullable OnCancelListener listener) {
    super.setOnCancelListener(listener);
}

@Override
protected void onStop() {
    super.onStop();
}

这些方法都检测关闭对话框的操作。但是,我建议您使用的最有效的方法是

@Override
public void onDetachedFromWindow() {
    Toast.makeText(getContext().getApplicationContext(), "Dialog had disappeared", Toast.LENGTH_SHORT).show();
    super.onDetachedFromWindow();
}