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

How to receive result from a dialog fragment to a dialog fragment

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

管理来自 A 的回调
if (getActivity() instanceof MyActivity) 
((MyActivity) getActivity()).manageSelectedItem();

但是如果对话框 A 托管在另一个对话框 B 中,那么如何管理回调。

我在 this 上搜索并找到了基于 Activity/FragmentActivity/Fragment 的解决方案,但无法解决 DialogFragment 上的问题。

我建议你看看Bus或使用BroadcastReceiver来做,多个回调可以让你的代码耦合,这很不利于维护。

您可以找到答案heare。或者你可以锁定片段 beerwin Activity.

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

我已经解决了 issue.I 刚刚在对话框 B.Checks 中实现了一个接口并在对话框 A 的 onCreate 方法中初始化了接口 是否托管对话框是 activity /dialog.

这是代码

DialogDialogTwo 作为 A :

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
}