Rey21 Ответов: 1

Как закрыть мое приложение, когда я нажимаю кнопку Назад в форме xamarin


Я пытаюсь использовать метод OnBackPressed, но это когда я нажимаю кнопку назад из мобильного приложения, это вызывает заставку моей страницы

Мой поток приложений выглядит следующим образом :
Начальный экран -и GT; язык -&ГТ; главное меню

Я хочу, чтобы при нажатии кнопки назад из мобильного приложения его как этот поток приложений
Язык -> закрыть приложение

И я показываю диалоговое окно оповещения, когда пользователь нажимает кнопку назад на странице langugage, это закрывает приложение

Что я уже пробовал:

Это мое кодирование:

Язык.язык XAML.в CS
public partial class Language : ContentPage
    {

        private ApiInterface api;

        public static Action BackPressed;

        private bool AcceptBack;

        public Bahasa()
        {
            this.BindingContext = new BahasaViewModel();
            InitializeComponent();

            api = RestService.For<ApiInterface>("http://192.168.0.186/webservice/webservice.asmx");

        }

        [Obsolete]
        private async void btn_lang(object sender, EventArgs e)
        {

            var deviceName = DeviceInfo.Name;
            var deviceType = DeviceInfo.DeviceType.ToString();
            var deviceModel = DeviceInfo.Model;
            var deviceManufacturer = DeviceInfo.Manufacturer;
            var devicePlatform = DeviceInfo.Platform.ToString();
            var deviceOs = DeviceInfo.Version.ToString();
            

            String date = DateTime.Now.ToString();


            Data_Device dtDevice = new Data_MimoDevice();
            dtDevice.Device_name = deviceName;
            dtDevice.Device_type = deviceType;
            dtDevice.Model = deviceModel;
            dtDevice.Manufacturer = deviceManufacturer;
            dtDevice.Platform = devicePlatform;
            dtDevice.Os = deviceOs;
            dtMimoDevice.First_accessed = date;

            DeviceIdQuery devicequery = new DeviceIdQuery(new Device(dtMimoDevice.Id));

            String jsonOfDevice = devicequery.id;

            var deviceQr = await api.CheckIfDeviceImeiExists(devicequery);

            if (deviceQr.isSuccess)
            {
                await Navigation.PushAsync(new Login());
            }
            else
            {
                var respDevice = await api.AddNewDevice(new DeviceQuery(dtMimoDevice));
                if (respDevice.isSuccess)
                {
                    await Navigation.PushAsync(new Login());
                }
            }
  
        }

        private void Button_Clicked(object sender, EventArgs e)
        {
            Navigation.PushAsync(new SettingPage());
        }

        protected override bool OnBackButtonPressed()
        {
            if (AcceptBack)
                return false;

            PromptForExit();
            return true;
        }

        private async void PromptForExit()
        {
            if (await DisplayAlert("", "Are you sure to exit?", "Yes", "No"))
            {
                AcceptBack = true;
                BackPressed();
            }

        }
    }


В MainActivity.в CS
[Activity(Label = "AppTest", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            Language.BackPressed = OnBackPressed;

            //NoHistory = true;

            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);

            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            global::Xamarin.Auth.Presenters.XamarinAndroid.AuthenticationConfiguration.Init(this,savedInstanceState);
            UserDialogs.Init(this);
            LoadApplication(new App());
        }
        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
        {
            Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

            base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }

Gerry Schmitz

Не вижу никакого кода для "OnBackPressed".

Язык.BackPressed = OnBackPressed;

Rey21

OnBackPressed уже находится в классе Language.xml.cs после private void Button_Clicked(object sender, EventArgs e)

Gerry Schmitz

защищенное переопределение bool OnBackButtonPressed()

Мы должны предположить, что это одно и то же? Ну, ты не выходишь, потому что твоя петля. Небрежность причиняет боль.

Rey21

не могли бы вы помочь мне, как это исправить ?

1 Ответов

Рейтинг:
0

Ankur Ramanuj

Ваш код идеально подходит для закрытия приложения. Это может быть из-за нити, вы можете попробовать это

 if (AcceptBack)
        return false;
Device.BeginInvokeOnMainThread(async () =>{  PromptForExit();});
  return true;


В OnBackButtonPressed.


Member 12794918

спасибо