所以我试着让后退按钮从另一个活动导航(从我们想要activity1,activity2,activity3导航到mainActivity(级别选择)),因为此刻它只导航回自身然后关闭这样的应用程序
我尝试将“NoHistory = true”添加到[Activity(Label = "firstQ", NoHistory =true)]
但是根本没有做任何事情,对于什么能解决这个问题有任何想法?
答案 0 :(得分:2)
NoHistory=true
属性标志实际上用于操作栏上的“向上”按钮。请参阅此处获取more信息。
您要做的是覆盖后退按钮的行为。你在这里可以做的就是
Activitiy1:
public override void OnBackPressed()
{
var intent = new Intent(this, typeof(MainActivity));
StartActivity(intent);
//base.OnBackPressed(); -> DO NOT CALL THIS LINE OR WILL NAVIGATE BACK
}
只要在前台活动上按下后退按钮,就会触发此方法。通过注释(或不调用)base.OnBackPressed();
将阻止活动返回,您可以开始新的活动,即MainActivity
。
现在,如果您的层次结构实际上与您说的MainActivity
基本上是您的root
活动不同,并且您按顺序启动其他人,按下后退按钮会返回主活动采取类似的方法,但需要一些额外的标志。对于此实例,您可能对FLAG_ACTIVITY_CLEAR_TOP
或Xamarin条款ActivityFlags.ClearTop
如果设置,则正在启动的活动已在运行中 当前任务,然后而不是启动它的新实例 活动,其上的所有其他活动将被关闭 这个意图将作为一个传递到(现在在顶部)旧活动 新的意图。
例如,考虑一个由活动组成的任务:A,B,C,D。 如果D调用带有解析为的Intent的startActivity() 活动B的组成部分,然后C和D将完成,B接收 给定的Intent,导致堆栈现在为:A,B。
现在,实现与添加的意图标志几乎相同。
public override void OnBackPressed()
{
var intent = new Intent(this, typeof(MainActivity));
intent.AddFlags(ActivityFlags.ClearTop);
StartActivity(intent);
//base.OnBackPressed(); -> DO NOT CALL THIS LINE OR WILL NAVIGATE BACK
}