2014-09-02 89 views
0

我有一個ViewPager和一個帶有標籤的ActionBar,這些標籤在點擊時會改變片段。我想將選項卡的文本(即tab.getText())發送到創建的片段。將tab.getText()傳遞給片段

@Override 
public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    viewPager.setCurrentItem(tab.getPosition()); 
    String text = tab.getText(); 
    } 

我不知道如何將它傳遞給創建的片段。

這是我的MainActivity:

public class MainActivity extends FragmentActivity implements 
    ActionBar.TabListener { 

private ViewPager viewPager; 
private TabsPagerAdapter mAdapter; 
private ActionBar actionBar; 

// Tab titles 
String[] tabs = {this.getCurrentDate(-5).toString(),this.getCurrentDate(-4).toString(),this.getCurrentDate(-3).toString(), this.getCurrentDate(-2).toString(),this.getCurrentDate(-1).toString(), 
     this.getCurrentDate(0).toString(), 
     this.getCurrentDate(1).toString(), this.getCurrentDate(2).toString(), this.getCurrentDate(3).toString(), this.getCurrentDate(4).toString(), this.getCurrentDate(5).toString(),}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 




    // Initilization 
    viewPager = (ViewPager) findViewById(R.id.pager); 
    actionBar = getActionBar(); 
    mAdapter = new TabsPagerAdapter(getSupportFragmentManager()); 

    viewPager.setAdapter(mAdapter); 
    actionBar.setHomeButtonEnabled(false); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);   

    // Adding Tabs 
    for (String tab_name : tabs) { 
     actionBar.addTab(actionBar.newTab().setText(tab_name) 
       .setTabListener(this));   
    } 

    actionBar.setSelectedNavigationItem(5); 

    /** 
    * on swiping the viewpager make respective tab selected 
    * */ 
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

     @Override 
     public void onPageSelected(int position) { 
      // on changing the page 
      // make respected tab selected 
      actionBar.setSelectedNavigationItem(position); 
     } 

     @Override 
     public void onPageScrolled(int arg0, float arg1, int arg2) { 
     } 

     @Override 
     public void onPageScrollStateChanged(int arg0) { 
     } 
    }); 

} 

public String getTab(Tab tab) { 
    return tab.getText().toString(); 
} 

@Override 
public void onTabReselected(Tab tab, FragmentTransaction ft) { 
} 

@Override 
public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    viewPager.setCurrentItem(tab.getPosition()); 

} 

@Override 
public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
} 

public String getCurrentDate(int offset) { 
    String calAsString; 
    DateFormat formatter = new SimpleDateFormat("MM/dd"); 
    Calendar cal = Calendar.getInstance(); 
     cal.add(Calendar.DATE, offset); 
     calAsString = formatter.format(cal.getTime()); 
    return calAsString; 

} 

} 

這是我ViewPager適配器:

public class TabsPagerAdapter extends FragmentPagerAdapter { 

public TabsPagerAdapter(FragmentManager fm) { 
    super(fm); 
} 

@Override 
public Fragment getItem(int index) { 

    switch (index) { 
    case 0: 
     return new TopRatedFragment(); 
    case 1: 
     // Games fragment activity 
     return new TopRatedFragment(); 
    case 2: 
     // Movies fragment activity 
     return new TopRatedFragment(); 

    case 3: 
     return new TopRatedFragment(); 

    case 4: 
     return new TopRatedFragment(); 

    case 5: 
     return new TopRatedFragment(); 

    case 6: 
     return new TopRatedFragment(); 

    case 7: 
     return new TopRatedFragment(); 

    case 8: 
     return new TopRatedFragment(); 

    case 9: 
     return new TopRatedFragment(); 

    case 10: 
     return new TopRatedFragment(); 


    } 
    return null; 
} 

@Override 
public int getCount() { 
    // get item count - equal to number of tabs 
    return 11; 
} 

} 
+0

你有多少片段? – mmlooloo 2014-09-02 18:39:39

+0

1片段,但11個選項卡。片段根據所點擊的選項卡來更改內容。 – 2014-09-02 19:36:52

+0

你可以發佈你的代碼! – mmlooloo 2014-09-02 19:49:06

回答

0

這是一個可能的解決方案,首先創建所有11 fragments,將它們保存在arrayList然後將它們傳遞到您的adapter

public class MainActivity extends FragmentActivity implements 
    ActionBar.TabListener { 

private ViewPager viewPager; 
private TabsPagerAdapter mAdapter; 
private ActionBar actionBar; 
private ArrayList<TopRatedFragment> myFragmentList = ArrayList<TopRatedFragment>(); 

// Tab titles 
String[] tabs = {this.getCurrentDate(-5).toString(),this.getCurrentDate(-4).toString(),this.getCurrentDate(-3).toString(), this.getCurrentDate(-2).toString(),this.getCurrentDate(-1).toString(), 
     this.getCurrentDate(0).toString(), 
     this.getCurrentDate(1).toString(), this.getCurrentDate(2).toString(), this.getCurrentDate(3).toString(), this.getCurrentDate(4).toString(), this.getCurrentDate(5).toString(),}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    for (String tab_name : tabs) { 
     TopRatedFragment fm = new TopRatedFragment(); 
     fm.method(tab_name); 
     myFragmentList.add(fm); 
    } 




    // Initilization 
    viewPager = (ViewPager) findViewById(R.id.pager); 
    actionBar = getActionBar(); 
    mAdapter = new TabsPagerAdapter(getSupportFragmentManager(), myFragmentList); 

    viewPager.setAdapter(mAdapter); 
    actionBar.setHomeButtonEnabled(false); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);   

    // Adding Tabs 
    for (String tab_name : tabs) { 
     actionBar.addTab(actionBar.newTab().setText(tab_name) 
       .setTabListener(this));   
    } 

    actionBar.setSelectedNavigationItem(5); 

    /** 
    * on swiping the viewpager make respective tab selected 
    * */ 
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

     @Override 
     public void onPageSelected(int position) { 
      // on changing the page 
      // make respected tab selected 
      actionBar.setSelectedNavigationItem(position); 
     } 

     @Override 
     public void onPageScrolled(int arg0, float arg1, int arg2) { 
     } 

     @Override 
     public void onPageScrollStateChanged(int arg0) { 
     } 
    }); 

} 

和i只是通過改變String[] tabs

public class TabsPagerAdapter extends FragmentPagerAdapter { 
ArrayList<TopRatedFragment> myList; 
public TabsPagerAdapter(FragmentManager fm, ArrayList<TopRatedFragment> myList) { 
    super(fm); 
    this.myList = myList; 
} 

@Override 
public Fragment getItem(int index) { 
    myList.get(index); 
} 

@Override 
public int getCount() { 
    // get item count - equal to number of tabs 
    return myList.size(); 
} 

} 
在此解決方案,您可以更改標籤的數量

:N適配器根據所獲得的列表,並創造一切。

所以現在你可以做很多事情:

@Override 
public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    myFragmentList.get(tab.getPosition()).Call any method; 

    } 

祝您好運!

+0

有什麼問題告訴? – mmlooloo 2014-09-03 02:13:46

+0

好吧,所以我通過myFragmentList.get(tab.getPosition())。getTabIndexInFragment(tab.getPosition));發送選定的選項卡的索引到片段。 現在的問題是,當我按下該選項卡並執行該方法時,將該片段放置位置的速度很慢。有時它根本不會發送它。哪裏不對? – 2014-09-03 09:36:05

+0

使用'FragmentStatePagerAdapter'而不是'FragmentPagerAdapter' – mmlooloo 2014-09-04 01:58:43

相關問題