-2

我有一个主要课程:

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

4

2 回答 2

1

假设您在创建对话框的位置有此代码

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

通过调用方法setTargetFragment(),您可以启用从 DialogFragment 获取结果的选项,因为当您使用startActivityForResult().

因此,当用户单击“确定”按钮时,在您的 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);
    }
}
于 2015-06-12T13:40:04.310 回答
0

如果覆盖 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 上的方法。

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

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

于 2015-06-12T13:20:47.310 回答