如何从 Simple DialogFragment 获取数据到 Fragment?

How to get data from SimpleDialogFragment to a Fragment?

我有一个主class:

public class MainFragment extends Fragment implements OnClickListener, OnMarkerClickListener {}

我有一个对话框class:

public class PedirTaxiDialog extends SimpleDialogFragment implements
    OnClickListener{}

例如:我有 FragmentA,我从中启动 SimpleDialogFragment(框中有 EditText)。 如何才能将 EditText 中的值取回给 FragmenaA?我尝试做很多东西......但我没有成功。请帮助我!!

在我的 MainFragment class 中,我显示对话框 class:

FragmentActivity activity;
activity = (FragmentActivity) getActivity().new PedirTaxiDialog().show(activity.getSupportFragmentManager(), "Salvar Favoritos");

我会得到用户在对话框中输入的值 class。 如何在我的 MainFragment 中获取 PedirTaxiDialog 的 return?

class 个链接:

PedirTaxiDialog.java

MainFragment.java

如果覆盖 DialogFragment 的 onAttach(Activity) 方法,您可以从 Dialog 访问 Activity。

例如:

private MainActivity controller;

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    this.controller = (MainActivity) activity;
}

@Override
public void onDetach() {
    this.controller = null;
    super.onDetach();
}

稍后,您可以使用控制器对象调用 Activity 上的方法。

您的 activity 然后可以更新片段。

最佳做法也是让您的 activity 实现回调接口,并将此回调接口用作控制器变量的 class,而不是使用 activity class本身。

假设您在创建对话框时使用了这段代码

FragmentManager fm = getActivity()
                     .getSupportFragmentManager();
             PedirTaxiDialog dialog = PedirTaxiDialog();
             dialog.setTargetFragment(MainFragment.this, "some request tag");
             dialog.show(fm, "Salvar Favoritos");

通过调用方法 setTargetFragment(),您启用了从 DialogFragment 获取结果的选项,因为当您使用 startActivityForResult() 启动它时,您从 activity 获取结果。

因此,当用户单击“确定”按钮时,在您的 DialogFragment 中,您必须在 OnClickListener 中创建意图,将其作为用户输入的额外文本字符串放入其中,设置 Result_OK 并调用 getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, yourIntent),如下所示:

Intent i = new Intent();
i.putExtra("textInput", text);
i.setResult(Activity.RESULT_OK);
getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, i);

然后在您的 MainFragment 中覆盖 onActivityResult() 方法:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == Activity.RESULT_OK && requestCode == "some request tag") {
        String text = getStringExtra("textInput);
    }
}