У меня есть два вида деятельности, A и B. A начинает B с вызова startActivityForResult()
.B имеет тему @android:style/Theme.Dialog
.
Таким образом, B отображается «поверх» A, но A по-прежнему виден (так как B является диалоговым окном).
Когда оба действия запускаются, я принудительно воссоздаю, переключаясь на другоезадание и обратно (я включил опцию «Не сохранять действия» в настройках разработчика Android. Я вижу, что OnCreate вызывается на A и B, когда я возвращаюсь к своей задаче.)
Когда я нажимаю кнопкув действии B он вызывает setResult()
и finish()
, но onActivityResult()
не вызывается на A .
Проблема не появляется
- если я не принудительно воссоздаю действия
или
- , если я удалю тему диалога из занятия B.
Я проверял этона Google Pixel с Android 9.
Это ожидаемое поведение или ошибка в Android?
Это код, который я использовал для проверки этого (Xamarin Android):
[Activity(Label = "@string/app_name")]
public class ActivityA : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
Kp2aLog.Log("OnCreate A");
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.yubichall_test);
{
FindViewById<Button>(Resource.Id.btn_yubichall).Text = "Start B";
FindViewById<Button>(Resource.Id.btn_yubichall).Click += (sender, args) =>
{
var chalIntent = new Intent(this, typeof(ActivityB));
StartActivityForResult(chalIntent, 123);
};
}
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
Android.Util.Log.Debug("KP2A", "OnActivityResult A: " + requestCode);
}
}
[Activity(Label = "@string/app_name", Theme = "@android:style/Theme.Dialog")]
public class ActivityB : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
Kp2aLog.Log("OnCreate B");
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.yubichall_test);
FindViewById<Button>(Resource.Id.btn_yubichall).Text = "Return result to A";
{
FindViewById<Button>(Resource.Id.btn_yubichall).Click += (sender, args) =>
{
SetResult(Result.Ok);
Finish();
};
}
}
}
где макет yubicall_test равен
<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:orientation="vertical"
android:layout_height="wrap_content">
<Button android:id="@+id/btn_yubichall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="yubi challenge"
/>
<TextView
android:id="@+id/text_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>