我有一个主要课程:
public class MainFragment extends Fragment implements OnClickListener, OnMarkerClickListener {}
我有一个对话类:
public class PedirTaxiDialog extends SimpleDialogFragment implements
OnClickListener{}
例如:我有FragmentA,我从中启动SimpleDialogFragment(框中有EditText)。 如何从EditText返回到FragmenaA的值?我尝试做很多事......但我没有成功。请帮帮我!!
在我的MainFragment类中,我显示了对话框类:
FragmentActivity activity;
activity = (FragmentActivity) getActivity().new PedirTaxiDialog().show(activity.getSupportFragmentManager(), "Salvar Favoritos");
我会在对话框类中获取用户输入的值。 我如何在MainFragment中获得PedirTaxiDialog的返回?
班级链接:
答案 0 :(得分:1)
假设您拥有此代码,您可以在其中创建对话框
FragmentManager fm = getActivity()
.getSupportFragmentManager();
PedirTaxiDialog dialog = PedirTaxiDialog();
dialog.setTargetFragment(MainFragment.this, "some request tag");
dialog.show(fm, "Salvar Favoritos");
通过调用方法setTargetFragment()
,您可以选择从DialogFragment获取结果,因为当您使用startActivityForResult()
启动活动时,您会从活动中获得结果。< / p>
因此,当用户单击“确定”按钮时,在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);
}
}
答案 1 :(得分:0)
如果覆盖DialogFragment的onAttach(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上的方法。
然后您的活动可以更新片段。
最佳做法是让您的活动实现一个回调接口,并将此回调接口用作控制器变量的类,而不是使用活动类本身。