используя Android .Support.V4.App.Fragment не работает в C# Xamarin - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь заставить FragmentTransation и FragmentManager работать в C# с использованием Android .Support.V4.App.Fragment, однако пространство имен затенено, а VS говорит: «Использование директивы не требуется». Я установил XAmarin Android Support V4 NuGet Package, очистил и перестроил мой проект, установил Xamarin. Android .Support.Fragment, ни один не работал. Пожалуйста, помогите мне понять, почему они все еще считаются устаревшими в VS, хотя я включил эту библиотеку.


using Android.App;
using Android.OS;
using Android.Support.V7.App;
using Android.Runtime;
using Android.Widget;
using Android.Support.V4.App.Fragment;
using System;

namespace LoginSystem
{
    [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
    public class MainActivity : AppCompatActivity
    {

        private Button mBtnSignUp;


        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.activity_main);

            mBtnSignUp = FindViewById<Button>(Resource.Id.btnSignUp);

            mBtnSignUp.Click += (object sender, EventArgs e) =>
            {
                //DEPRECATION HERE
                FragmentTransaction transaction = FragmentManager.BeginTransaction();
                dialog_SignUp signUpDialog = new dialog_SignUp();
                signUpDialog.Show(transaction, "dialog fragment");
            };
        }
        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);
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 30 января 2020

Используйте SupportFragmentManager и полностью определите FragmentTransaction, поскольку этот класс существует в двух пространствах имен.

Android.Support.V4.App.FragmentTransaction

0 голосов
/ 30 января 2020

Согласно вашему коду, вы используете FragmentManager и FragmentTransaction, пространство имен равно Android .App.FragmentManager и Android .App.FragmentTransation , тогда signUpDialog - это пространство имен : Android .app.fragment , но вы можете посмотреть документацию Android , она устарела в Android P ie / API Level 28.

Таким образом, вы можете использовать Android .Support.V4.App.Fragment, во-первых, вам нужно сначала установить Xamarin. Android .Support.v4 с помощью пакета Nuget.

Затем используйте FrameLayout, чтобы содержать Android .Support.V4.App.Fragment

 Fragment1 dialog = new Fragment1();
 Android.Support.V4.App.FragmentTransaction ft = SupportFragmentManager.BeginTransaction();
 ft.Replace(Resource.Id.myFrameLayout, dialog).Commit();

Я сделаю один пример из этих двух способов, вы можете посмотреть:

https://github.com/CherryBu/fragment

0 голосов
/ 29 января 2020

Вы установили пакет nuget Xamarin. Android .Support.v4 v28.0.0.3?

Если он у вас есть, вы должны использовать SupportFragmentManager вместо FragmentManager, и это разрешит Ваша проблема.

Взгляните на это: enter image description here

...