2013-03-11 3 views
1

Я хочу обрабатывать один фрагмент в tabsadapter, который является статическим классом в моей Activity. Проблема в том, как я могу получить в onTabSelected?Android TabsAdapter handle fragments

С OnCreate у меня есть этот код:

Tab tab1 = actionBar.newTab().setText("ABOUT"); 
tabsAdapter.addTab(tab1, PoiAboutFragment.class, null); 

и мой класс вкладок адаптера заключается в следующем, который работает без проблем.

public static class TabsAdapter extends FragmentPagerAdapter implements 
     ActionBar.TabListener, ViewPager.OnPageChangeListener { 
    private final Context mContext; 
    private final ActionBar mActionBar; 
    private final ViewPager mViewPager; 
    private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); 
    private Object gridTag; 

    static final class TabInfo { 
     private final Class<?> clss; 
     private final Bundle args; 

     TabInfo(Class<?> _class, Bundle _args) { 
      clss = _class; 
      args = _args; 
     } 
    } 

    public TabsAdapter(SherlockFragmentActivity activity, ViewPager pager, 
      ActionBar actionBar) { 
     super(activity.getSupportFragmentManager()); 
     mContext = activity; 
     mActionBar = actionBar; 
     mViewPager = pager; 
     mViewPager.setAdapter(this); 
     mViewPager.setOnPageChangeListener(this); 
    } 

    public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) { 
     TabInfo info = new TabInfo(clss, args); 
     tab.setTag(info); 
     if(clss.equals(GridFragment.class)) 
      gridTag = tab.getTag(); 
     tab.setTabListener(this); 
     mTabs.add(info); 
     mActionBar.addTab(tab); 
     notifyDataSetChanged(); 
    } 

    @Override 
    public int getCount() { 
     return mTabs.size(); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     TabInfo info = mTabs.get(position); 
     return Fragment.instantiate(mContext, info.clss.getName(), 
       info.args); 
    } 

    public void onPageScrolled(int position, float positionOffset, 
      int positionOffsetPixels) { 
    } 

    public void onPageSelected(int position) { 
     mActionBar.setSelectedNavigationItem(position); 
    } 

    public void onPageScrollStateChanged(int state) { 
    } 

    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     Object tag = tab.getTag(); 
     Log.i(TAG, "onTabSelected has been called"); 
     if(tag.equals(gridTag)) 
      Log.i(TAG, "gridtab has been called"); 
     for (int i = 0; i < mTabs.size(); i++) { 
      if (mTabs.get(i) == tag) { 
       mViewPager.setCurrentItem(i); 
      } 
     } 
    } 

проблема заключается в том, что я хочу, чтобы справиться с одним из моих фрагментов в обоих OnCreate метод и в tabsAdapter, но я не имею ни фрагмент тега ни фрагмент Id. Как я могу обрабатывать свои методы из своей активности?

ответ

1

FragmentPagerAdapter source «s makeFragmentName методы показывают, что фрагменты создаются со следующими метками:

"android:switcher:" + viewId + ":" + id 

Где viewId это идентификатор из ViewPager, то есть, использовать

activity.getSupportFragmentManager().findFragmentByTag(
       "android:switcher:" + pager.getId() + ":0" 

, чтобы получить первый Фрагмент.

+0

ок я буду тестировать его, и я принимаю ваш ответ, если он работает! Что касается OnCreate метода моего класса активности? Как я могу назвать фрагмент оттуда? – user2065529