2015-09-22 20 views
1

我有一個FragmentPagerAdapter,在片段類中我有一個公共方法,我需要從主要活動中使用。 在這一點上,我不知道如何訪問包含該方法的片段。我可以修改下面的類來設置ID或某些東西的碎片?如何在FragmentPagerAdapter的某些覆蓋方法中設置fragment ID?

public class SectionsPagerAdapter extends FragmentPagerAdapter { 
    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
      switch (position) { 
      case 0: 
       return new Fragment_1(); 
      case 1: 
       return new Fragment_2(); 
      case 2: 
       return new Fragment_3(); 
      } 
     return null; 
    } 

    @Override 
    public int getCount() { 
     return 3; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     Locale l = Locale.getDefault(); 
      switch (position) { 
      case 0: 
       return getString(R.string.fg_1).toUpperCase(l); 
      case 1: 
       return getString(R.string.fg_2).toUpperCase(l); 
      case 2: 
       return getString(R.string.fg_3).toUpperCase(l); 
      } 
     } 
     return null; 
    } 
} 

如何設置Fragment ID或Fragment標籤或某些內容以便後續訪問該片段?

任何其他方式來訪問片段方法可能是好的。

編輯與更多信息:

我真的失去了這一點。但是,我也有一個ViewPager,這些片段與actionBar標籤關聯。

mViewPager = (ViewPager) findViewById(R.id.pager); 
mViewPager.setAdapter(mSectionsPagerAdapter); 

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener(){ 
    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

    } 

    @Override 
    public void onPageSelected(int position) { 
     actionBar.setSelectedNavigationItem(position); 
    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 

    } 
}); 

for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) { 
    actionBar.addTab(actionBar.newTab().setText(mSectionsPagerAdapter.getPageTitle(i)).setTabListener(this)); 
} 

有什麼方法可以與碎片進行通信嗎?

+0

'FragmentPagerAdapter'不太適合您的用例。要麼使用某種分離的通信(例如事件總線),要麼切換到不同的'PagerAdapter'實現(例如[我的'ArrayPagerAdapter'](https://github.com/commonsguy/cwac-pager))。 – CommonsWare

+0

編輯更多信息。 – osanfer

+0

看看這個問題的答案:http://stackoverflow.com/questions/14035090/how-to-get-existing-fragments-when-using-fragmentpageradapter –

回答

-1

像這樣:

 switch (position) { 
     case 0: 
      Fragment f = new Fragment_1(); 
      f.setId(...); 
      return f; 
     case 1: 
      ... 
     } 

這裏假設你有你的片段SETID方法。

但是我所做的是爲每個片段定義一個靜態字符串TAG,然後我可以使用Fragment_1.TAG訪問它。

+1

有沒有''setId()'方法' Fragment'。 – CommonsWare

+0

問題是:「我可以修改下面的類來設置ID或某些片段的內容嗎?」 ......答案是肯定的,他只需要創建該方法。不知道他想用Id來做什麼。 – ElDuderino

+1

「不知道他想用Id做什麼」 - 大概是調用'findFragmentById()'。 「然而,我所做的是爲每個片段定義一個靜態字符串TAG,然後我可以使用Fragment_1.TAG來訪問它 - 」由於FragmentPagerAdapter子類沒有執行FragmentTransaction,所以沒有機會爲分段。 – CommonsWare