我有两个活动,A 和 B。通过调用
因此,B 显示在 A 的上面,但 A 仍然可见(因为 B 是一个对话框)。
当启动这两个活动时,我通过切换到另一个任务然后返回来强制重新创建它们(我在 Android 开发者设置中启用了“不保留活动”选项。我发现当我返回到我的任务时,A 和 B 的 OnCreate 方法被调用)。
当我在 Activity B 中单击按钮时,它调用
问题出现在以下情况下:
这是我用于测试的代码(Xamarin Android):
startActivityForResult()
,A 启动了 B。B 的主题为@android:style/Theme.Dialog
。因此,B 显示在 A 的上面,但 A 仍然可见(因为 B 是一个对话框)。
当启动这两个活动时,我通过切换到另一个任务然后返回来强制重新创建它们(我在 Android 开发者设置中启用了“不保留活动”选项。我发现当我返回到我的任务时,A 和 B 的 OnCreate 方法被调用)。
当我在 Activity B 中单击按钮时,它调用
setResult()
和 finish()
,但是 onActivityResult()
在 A 上未被调用。问题出现在以下情况下:
- 如果我不强制重新创建活动。
- 如果我从 Activity B 中删除对话框主题。
这是我用于测试的代码(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>