如何从 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 个链接:
如果覆盖 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);
}
}
我有一个主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 个链接:
如果覆盖 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);
}
}