【问题标题】:How to get access to getSupportFragmentManager or SupportFragmentManager in fragment如何访问片段中的 getSupportFragmentManager 或 SupportFragmentManager
【发布时间】:2017-11-03 15:47:55
【问题描述】:

当前上下文中不存在名称“getSupportFragmentManager”

我的代码:

using Android.Views;
using Android.OS;
using Android.Support.V4.App;
using com.refractored;
using Android.Support.V4.View;

namespace XamarinStore
{
    public class HomeFragment : Android.App.Fragment
    {
        BadgeDrawable basketBadge;
        int badgeCount;

        public override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            RetainInstance = true;
            SetHasOptionsMenu(true);



            // Create your fragment here
        }

        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            var HomePage = inflater.Inflate(Resource.Layout.HomeLayout, container, false);

            var pager = HomePage.FindViewById<ViewPager>(Resource.Id.pager);
            pager.Adapter = new MyPagerAdapter(SupportFragmentManager);


            var tabs = HomePage.FindViewById<PagerSlidingTabStrip>(Resource.Id.tabs);
            tabs.SetViewPager(pager);

            return HomePage;
        }
    }

    public class MyPagerAdapter : FragmentPagerAdapter{
        private  string[] Titles = {"Categories", "Home", "Top Paid", "Top Free", "Top Grossing", "Top New Paid",
            "Top New Free", "Trending"};

        public MyPagerAdapter(Android.Support.V4.App.FragmentManager fm) : base(fm)
        {
        }

        public override Java.Lang.ICharSequence GetPageTitleFormatted (int position)
        {
            return new Java.Lang.String (Titles [position]);
        }
        #region implemented abstract members of PagerAdapter
        public override int Count {
            get {
                return Titles.Length;
            }
        }
        #endregion
        #region implemented abstract members of FragmentPagerAdapter
        public override Android.Support.V4.App.Fragment GetItem (int position)
        {
            return SuperAwesomeCardFragment.NewInstance (position);
        }
        #endregion
    }
}

如何在片段中访问 getSupportFragmentManager ..

我正在使用 xamarin 跨平台开发工具.. 借助来自此来源的示例项目 https://xamarin.com/c-sharp-shirt

在演示项目中,如果 BackStackEntryCount 计数为零,它会将屏幕切换到另一个片段。所以我用新的 homefragment 替换了代码,我决定在那个片段中添加标签。所以我尝试使用该组件“Material Pager Sliding Tab Strip”..在使用该组件时,它会因此错误而停止。 当前上下文中不存在名称“getSupportFragmentManager”

http://components.xamarin.com/view/PagerSlidingTabStrip

【问题讨论】:

  • @Harry 当前上下文中不存在名称“getActivity”
  • 我删除了评论看到这个question

标签: android android-fragments xamarin


【解决方案1】:

首先我继承HomeFragmentAndroid.Support.V4.App.Fragment

然后我用ChildFragmentManager代替SupportFragmentManager

pager.Adapter = new MyPagerAdapter(ChildFragmentManager);

【讨论】:

    【解决方案2】:

    你也可以这样做:

    using Fragment = Android.Support.V4.App.Fragment;
    using FragmentManager = Android.Support.V4.App.FragmentManager;
    
    
    public class YourFragment : Fragment
    {
    //...
    
    //To access to FragmentManager use base.FragmentManager
    //Example:
    base.FragmentManager.BeginTransaction()
        .Replace(Resource.Id.content_frame, fragment)
            .Commit();
    
    //...
    }
    

    前两行(使用...)非常有用,如果 您只能使用 Support 提供的 Fragment 和 FragmentManager 并且您很清楚不要将它们与普通的 Fragment 和 FragmentManager 混合使用。

    【讨论】:

      【解决方案3】:

      在 Xamarin Android 中,您应该能够使用 FragmentManager 访问它,并且您需要从 Android.Support.V4.App.Fragment 继承 像这样:

       public class HomeFragment :  Android.Support.V4.App.Fragment
       {
          BadgeDrawable basketBadge;
          int badgeCount;
      
          public override void OnCreate(Bundle savedInstanceState)
          {
              base.OnCreate(savedInstanceState);
              RetainInstance = true;
              SetHasOptionsMenu(true);
      
              var count =  FragmentManager.BackStackEntryCount;
      
              // Create your fragment here
          }
      

      getActivity 在 Xamarin 中的等价物是 Activity(例如,在从 Android.Support.V4.App.Fragment 继承的类中使用时)

      【讨论】:

        【解决方案4】:

        我不熟悉 Xamarin,但在原生 android 开发中,您无法使用 getFragmentManagergetSupportFragmentManager 方法从 Fragment 访问 FragmentManager。从API 17,您可以调用getChildFragmentManager 方法来获取FragmentManager 实例,该实例允许您管理来自另一个片段的片段。

        getChildFragmentManager().beginTransaction().add(...).commit();
        getChildFragmentManager().executePendingTransactions();
        

        【讨论】:

          【解决方案5】:

          公共类 HomeFragment : FragmentActivity

          使用 FragmentActivity 扩展您的课程将解决您的问题

          【讨论】:

            猜你喜欢
            • 2013-12-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-12-15
            • 1970-01-01
            • 2022-11-24
            • 2021-01-03
            相关资源
            最近更新 更多