[英]Save App state in Android Xamarin
我的xamarin android应用程序流程是启动画面活动->登录活动->主页活动
在“家庭活动”中,我按“主页”按钮。 我希望“家庭活动”仍然打开。 但实际上,启动屏幕再次打开->登录活动->主页活动。
那么当我回到应用程序时,如何保存当前的应用程序状态?
非常感谢,
在您不想启动应用程序的启动屏幕的情况下,可以在“启动屏幕活动”中将活动的NoHistory = true
设置为NoHistory = true
。
您可以对登录活动执行相同的操作,但是如果用户未登录,则可能要返回登录活动,因此在“主活动”中覆盖OnBackPressed()
:
例:
public override void OnBackPressed()
{
if (YourUsersLoginStatus = false)
{
base.Onbackpressed
// Finish this activity unless you need to keep it for some reason
finish();
} else {
// Do nothing as you want to stay on this activity as your
// User is still logged in
}
}
NoHistory属性:
Android风格:
[android:noHistory="true"] attribute
Xamarin样式:
[Activity (NoHistory = true)]
Android.App.ActivityAttribute.NoHistory属性
当用户离开时,是否应从活动堆栈中删除该活动并结束该活动。
句法
public Boolean NoHistory {get; 组; }
值:一个布尔值,指定是否应从用户活动堆栈中删除活动并在用户离开时完成活动。
参考: http : //developer.xamarin.com/api/property/Android.App.ActivityAttribute.NoHistory/
参考: http : //developer.xamarin.com/guides/android/application_fundamentals/activity_lifecycle/
参考: http : //developer.android.com/reference/android/R.styleable.html#AndroidManifestActivity_noHistory
更新:
将NoHistory
属性设置为true且MainLauncher设置为true的启动画面活动
[Activity(Theme = "@style/Theme.Splash", MainLauncher = true, NoHistory = true)]
public class SplashActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
StartActivity(typeof(MainActivity));
}
}
SplashActivity
启动MainActivity
,后者可以启动SpecialActivity
[Activity (Label = "MainActivity", Icon = "@mipmap/icon")]
public class MainActivity : Activity
{
protected override void OnCreate (Bundle savedInstanceState)
{
base.OnCreate (savedInstanceState);
SetContentView (Resource.Layout.Main);
Button button = FindViewById<Button> (Resource.Id.myButton);
button.Click += delegate {
//Fake a login status
var editor = GetSharedPreferences ("Login", Android.Content.FileCreationMode.Private);
var edit = editor.Edit ();
edit.PutBoolean ("login", true);
edit.Apply();
StartActivity(typeof(SpecialActivity));
};
}
}
“后退”按钮将不会返回到SplashActivity
因为初始记录不在堆栈历史记录中。 如果单击该按钮, SpecialActivity
启动。
[Activity (Label = "SpecialActivity")]
public class SpecialActivity : Activity
{
ISharedPreferences myPrefs;
Button logoutButton;
protected override void OnCreate (Bundle savedInstanceState)
{
base.OnCreate (savedInstanceState);
SetContentView (Resource.Layout.Special);
logoutButton = FindViewById<Button> (Resource.Id.logoutButton);
myPrefs = GetSharedPreferences ("Login", Android.Content.FileCreationMode.Private);
logoutButton.Click += delegate {
var edit = myPrefs.Edit ();
edit.PutBoolean ("login", false);
edit.Apply();
logoutButton.Text = "Logout / Back Button will work now";
};
}
public override void OnBackPressed()
{
var isLoggedIn = myPrefs.GetBoolean("login", false);
if (!isLoggedIn)
{
base.OnBackPressed ();
Finish ();
} else {
logoutButton.Text = "Click me to log out first!";
}
}
}
在您通过单击按钮“注销”之前,后退按钮将不起作用,注销后,后退按钮将返回到MainActivity
返回MainActivity
,后退按钮将退出应用程序,因为没有堆栈历史记录,并且我们也不会覆盖OnBackPressed
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.