Android 如何从对话框片段接收到对话框片段的结果

Android 如何从对话框片段接收到对话框片段的结果,android,dialog,android-dialogfragment,Android,Dialog,Android Dialogfragment,我有一个对话框,在很多活动中使用。我创建了一个新的对话框B,并实现了一个接口来获取来自a的调用。在这两种情况下,我都使用了对话框片段。对于许多活动,我可以使用 if (getActivity() instanceof MyActivity) ((MyActivity) getActivity()).manageSelectedItem(); 但是,如果对话框A位于另一个对话框B中,那么如何管理回调 我已在上搜索并找到基于活动/碎片活动/碎片的解决方案,但无法解决DialogFragment上

我有一个对话框,在很多活动中使用。我创建了一个新的对话框B,并实现了一个接口来获取来自a的调用。在这两种情况下,我都使用了对话框片段。对于许多活动,我可以使用

if (getActivity() instanceof MyActivity) 
((MyActivity) getActivity()).manageSelectedItem();
但是,如果对话框A位于另一个对话框B中,那么如何管理回调


我已在上搜索并找到基于活动/碎片活动/碎片的解决方案,但无法解决DialogFragment上的问题

我建议您查看或使用
BroadcastReceiver
来执行此操作,多次回调会让您的代码耦合,这对于维护来说非常糟糕。

您可以找到Answare。或者,您可以锁定片段beerwin活动

getSuportFragmentManager().findFragmentByTag(TAG_FRAGMENT_A).callback();

我已经解决了这个问题。我刚刚在对话框B中实现了一个接口。在对话框a中的onCreate方法中检查并初始化接口,看宿主对话框是否是activity/dialog

这是密码

对话框2作为一个:

public class DialogTwo extends DialogFragment {


@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    try {
        if(!(getActivity() instanceof SelectedItemListener)) {
            callback = (SelectedItemListener) getTargetFragment();
        }
    } catch (Exception e) {
        throw new ClassCastException("Calling Fragment must implement SelectedItemListener");
    }

}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return super.onCreateView(inflater, container, savedInstanceState);
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(getActivity(), R.style.AlertDialogCustom));

    builder.setTitle(R.string.select_color)
            .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    if (getActivity() instanceof SelectedItemListener) {
                            ((NewExerciseActivity) getActivity()).manageSelectedItem();
                    }else {
                        callback.manageSelectedItem();
                    }
                }
            })
            .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                }
            });

    return builder.create();
   }
}
从对话框B调用:

 private void showDialog() {
    FragmentActivity activity = (FragmentActivity) getActivity();
    FragmentManager fm = activity.getSupportFragmentManager();
    DialogTwo dialogTwo = new DialogTwo();
    dialogTwo.setTargetFragment(this,0);
    dialogTwo.show(fm, "dialogTwo");
}

@Override
public void manageSelectedItem() {
       //do something
}

问题是什么?您是否正在尝试将数据从
DialogFragment
B传递到
DialogFragment
A?你找到的解决方案,有什么问题吗?谢谢。我发布了我的解决方案。谢谢。我发布了我的解决方案。