如何从SimpleDialogFragment获取数据到片段?

时间:2015-06-12 13:10:35

标签: java android android-fragments dialogfragment simpledialog

我有一个主要课程:

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的返回?

班级链接:

PedirTaxiDialog.java

MainFragment.java

2 个答案:

答案 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上的方法。

然后您的活动可以更新片段。

最佳做法是让您的活动实现一个回调接口,并将此回调接口用作控制器变量的类,而不是使用活动类本身。