2015-04-09 8 views
3

Название «getSupportFragmentManager» не существует в текущем контекстеКак получить доступ к getSupportFragmentManager или SupportFragmentManager в фрагменте

Мой код:

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

+0

@Harry Название «getActivity» не существует в текущем контексте – Raj

+0

я удалить комментарий увидеть этот [вопрос ] (HTTP: // StackOverflow.ком/вопросы/23604536/с использованием-supportmapfragment-вместо-оф-MapFragment) – Harry

ответ

2

Сначала я унаследовать HomeFragment к Android.Support.V4.App.Fragment

Тогда я использовал ChildFragmentManager вместо SupportFragmentManager

pager.Adapter = new MyPagerAdapter(ChildFragmentManager); 
1

В 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 's equi Валент в Xamarin является Activity (при использовании в классе, который наследуется от Android.Support.V4.App.Fragment, например)

1

Вы также можете сделать:

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(); 

//... 
} 

Первые две строки (с использованием ...) очень полезно, если вы работайте только с Fragment и FragmentManager из Support , и у вас есть четкое представление о том, чтобы не смешивать их с обычным фрагментом и FragmentManager.

0

Я не знаком с Xamarin но в родной андроида развития вы не можете получить доступ к FragmentManager из Fragment с помощью getFragmentManager или getSupportFragmentManager методов. От API 17 вы можете вызвать метод getChildFragmentManager, чтобы получить экземпляр FragmentManager, который позволяет управлять фрагментами из другого фрагмента.

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

класс HomeFragment общественности: FragmentActivity

Расширьте класс, используя FragmentActivity решит вашу проблему

Смежные вопросы