Android Приложение Xamarin - как поддерживать состояние формы, когда экран устройства выключен, а затем снова включен? - PullRequest
0 голосов
/ 03 августа 2020

У меня есть опыт разработки. NET веб-приложений, и недавно я начал работать с Android разработкой.

Я обнаружил вопросы, связанные с поддержанием состояния «активность», когда приложение завершается, а затем вновь открыт. Но у меня есть пользователи, которые заполняют форму на странице и по какой-то причине иногда отключают экраны своих устройств во время заполнения формы. Когда они снова включают свои экраны, все введенные данные исчезают, и им приходится вводить все заново. Где мне нужно искать, чтобы узнать, как поддерживать состояние формы, когда это происходит?

Моя целевая Android версия - 8.1 (уровень API 27 - Oreo), и я использую Xamarin. Я даже не совсем понимаю, с чего начать искать эту информацию.

Edit - я собираюсь добавить код из моего файла MainActivity.cs. Я изменил некоторые несущественные вещи для сохранения анонимности:

using Android.App;
using Android.Content.PM;
using Android.Runtime;
using Android.OS;
using System.Linq;

namespace Namespace.Droid
{
    [Activity(Label = "Label", 
        Icon = "@mipmap/ic_launcher", 
        Theme = "@style/MainTheme", 
        MainLauncher = true,
        WindowSoftInputMode = Android.Views.SoftInput.StateAlwaysHidden,
        ConfigurationChanges = ConfigChanges.UiMode,
        ScreenOrientation = ScreenOrientation.Portrait)]
    public class MainActivity :         global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        public static MainActivity Instance;

        public bool ArePermissionsGranted = false;
        public bool IsWaitingForPermission = true;

        protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);

            Acr.UserDialogs.UserDialogs.Init(this);
            Rg.Plugins.Popup.Popup.Init(this, savedInstanceState);

            Instance = this;

            global::Xamarin.Forms.Forms.SetFlags("Shell_Experimental",     "Visual_Experimental", "CollectionView_Experimental",     "FastRenderers_Experimental");
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());
        }

        public override void OnRequestPermissionsResult(int requestCode,     string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[]     grantResults)
        {
            if (grantResults.Any(result => result == Permission.Denied))
            {
                ArePermissionsGranted = false;
            }
            else
            {
                ArePermissionsGranted = true;
            }

            IsWaitingForPermission = false;
        }
    }
}

1 Ответ

0 голосов
/ 04 августа 2020

Вы можете использовать метод OnSaveInstanceState для хранения данных в вашей форме. Затем заполните его, когда снова включите экран. Вы можете обратиться к Preserve Instance State .

protected override void OnSaveInstanceState (Bundle outState)
{
   outState.PutInt (xxx, xx);//save the data
   Log.Debug(GetType().FullName, "Activity A - Saving instance state");

   // always call the base implementation!
   base.OnSaveInstanceState (outState);    
}

, затем передайте этот Bundle обратно в наш метод OnCreate.

Или вы можете попробовать установить ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.KeyboardHidden|Android.Content.PM.ConfigChanges.ScreenSize в свой атрибут активности.

перезаписать в вашем go не будет снова проходить через жизненный цикл Activity:

public override void OnConfigurationChanged(Configuration newConfig)
   {
      base.OnConfigurationChanged(newConfig);
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...