繁体   English   中英

在Android Xamarin中保存应用状态

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM