android - 使用 onDismiss() 从 DialogFragment 获取信息

标签 android dialog android-dialogfragment

我正在开发一个应用程序,并且正在使用扩展 DialogFragment 的自定义对话框。该对话框将包含我想要传递给父 Activity 的某些字段。我尝试实现 OnDismissListener 但参数是对话框接口(interface)。

有什么想法吗?

家长 Activity :

fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            BreakCreator mDialog = new BreakCreator();
            mDialog.show(getSupportFragmentManager(), "start break Creator");

        }
    });

监听者:

@Override
public void onDismiss(DialogInterface dialog) {
    Log.d("debug", "in onDismiss");
        BreakCreator mBreakCreator = BreakCreator.class.cast(dialog);// This MIGHT not work
    //TODO cast and shit

        if(!mBreakCreator.isCancelled() ){
            int startMinute = mBreakCreator.getStartMinute();
            int startHour = mBreakCreator.getStartHour();
            int endMinute = mBreakCreator.getEndMinute();
            int endHour = mBreakCreator.getEndHour();
            String day = mBreakCreator.getDay();

            Break mBreak = new Break(new ultramirinc.champs_mood.Time(startHour, startMinute),
                    new ultramirinc.champs_mood.Time(endHour, endMinute), day);
            breakList.add(mBreak);
            Log.d("created", "break added");
            recyclerView.invalidate();

        }else{
            Log.d("debug", "is not cancelled");
    }
}

对话框类:

public void onDismiss(final DialogInterface dialog) {
    super.onDismiss(dialog);
    final Activity activity = getActivity();
    if (activity instanceof DialogInterface.OnDismissListener) {
        ((DialogInterface.OnDismissListener) activity).onDismiss(dialog);
    }
}

最佳答案

使用自定义监听器,下面是如何实现这一点的示例。 Android Developer Guide 中也对此进行了解释.

public class CustomDialog extends DialogFragment {

   public interface CustomListener{
      void onMyCustomAction(CustomObject co);
   }

   private CustomListener mListener;

   public void setMyCustomListener(CustomListener listener){
     mListener = listener;
   }

   @Override
   public Dialog onCreateDialog(Bundle savedInstanceState) {
      ...
      Code to create dialog 
      ...
   }

   @Override
   public void onDismiss(DialogInterface dialog) {
       if(mListener != null){
          CustomObject o = new CustomObject();
          mListener.onMyCustomAction(o);
       }
       super.onDismiss();
   }
}

创建自定义对话框时,设置监听器。

CustomDialog awesomeDialog = new CustomDialog();
awesomeDialog.setMyCustomListener(new CustomDialog.CustomListener() {
  @Override
  public void onMyCustomAction(CustomObject o){
     Log.i("TAG",o.toString());
  }
});

关于android - 使用 onDismiss() 从 DialogFragment 获取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43400273/

相关文章:

java - 发送带有 URL 中的查询字符串的 HTTP Post

apache-flex - Flex 中的同步对话框?

安卓错误: Can't find ColorStateList from drawable resource while using dialogs

具有绝对定位子项的 jQuery UI 对话框部分隐藏了溢出的子项

android - 如何通过旋转正确保留 DialogFragment?

Android 支持 v4 DialogFragment 崩溃应用程序

android - 如何将菜单添加到布局

java - Android JSON WebRequest - JSONException : End of input at character 0

android - 如何全屏显示对话框 fragment ?

android - 以比在 Android 中使用 java.util.zip 更快的方式解压缩文件