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

Kos*_*uta 26 android dialog android-fragments

想象一下,我有FragmentA,我从中启动了DialogFragment(有EditText框中).如何我能回到从价值EditTextFragmentA?我尽量让像这样,而,但我没有成功.

mat*_*pic 75

Fragment.onActivityResult()方法在这种情况下很有用.它需要getTargetRequestCode(),这是您在片段之间设置的代码,因此可以识别它们.另外,它需要一个请求代码,通常只是0代码运行良好,然后是一个Intent,你也可以附加一个字符串,就像这样

Intent intent = new Intent();
intent.putExtra("STRING_RESULT", str);
Run Code Online (Sandbox Code Playgroud)

此外,setTargetFragment(Fragment, requestCode)应该在发送结果的片段中使用它来识别它.总的来说,您在请求片段中的代码如下所示:

FragmentManager fm = getActivity().getSupportFragmentManager();
DialogFragment dialogFragment = new DialogFragment();
dialogFragment.setTargetFragment(this, REQUEST_CODE);
dialogFragment.show();
Run Code Online (Sandbox Code Playgroud)

发送数据的类(DialogFragment)将使用我们刚刚定义的Fragment来发送数据:

private void sendResult(int REQUEST_CODE) {
    Intent intent = new Intent();
    intent.putStringExtra(EDIT_TEXT_BUNDLE_KEY, editTextString);
    getTargetFragment().onActivityResult(
        getTargetRequestCode(), REQUEST_CODE, intent);
}
Run Code Online (Sandbox Code Playgroud)

为了接收数据,我们在最初启动DialogFragment的Fragment中使用这种类:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Make sure fragment codes match up 
    if (requestCode == DialogFragment.REQUEST_CODE) {
        String editTextString = data.getStringExtra(
            DialogFragment.EDIT_TEXT_BUNDLE_KEY);
Run Code Online (Sandbox Code Playgroud)

在这一点上,你必须从你的字符串EditTextDialogFragment父片段.只需sendResult(int)TextChangeListener()匿名类中使用该方法,以便在需要时发送文本.