Android O中DialogFragment中onActivityResult的不同行为

Utt*_*sed 6 android android-dialogfragment onactivityresult android-8.0-oreo

我注意到的Android 7(和前)和Android 8(测试版)时调用之间的差异startActivityForResult,从一个DialogFragment.

在MainActivity下面,被压在对话框中,当"OK",解聘本身,创建并显示一个新的对话框,并调用startActivityForResult了AnotherActivity.AnotherActivity马上结束.

在Android 7 onActivityResult上,在新的对话框实例上调用.在Android 8上,onActivityResult永远不会被调用.

谁能解释这种差异?

MCVE

public class MainActivity extends AppCompatActivity {

    private static final String FRAGMENT_TAG = "tag";

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        new SomeDialogFragment().show(getFragmentManager(), FRAGMENT_TAG);
    }

    public static class SomeDialogFragment extends DialogFragment
    {
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState)
        {
            super.onCreateDialog(savedInstanceState);

            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

            builder.setPositiveButton(
                    "OK",
                    new DialogInterface.OnClickListener()
                    {
                        @Override
                        public void onClick(DialogInterface d, int which)
                        {
                            dismiss();
                            SomeDialogFragment dialog = new SomeDialogFragment();
                            dialog.show(getFragmentManager(), FRAGMENT_TAG);
                            startActivityForResult(new Intent(getActivity(), AnotherActivity.class), 7);
                        }
                    });

            return builder.create();
        }

        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data)
        {
            // Called on Android 7 but not Android 8.
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

和

public class AnotherActivity extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setResult(1);
        finish();
    }
}
Run Code Online (Sandbox Code Playgroud)