0

我有一個包含11個選項卡和1個片段的ActionBar。我也有一個ViewPager來顯示片段。當一個標籤被點擊時,它會創建相同的片段。選項卡顯示日期,以便每天更改。我需要的是將標籤的文本(即.getTabText())發送到片段,這將改變片段的內容。試圖弄清楚如何做到這一點,我遇到了很多麻煩。這裏是我的所有代碼:抓取片段中的TabText

public class MainActivity extends FragmentActivity implements 
     ActionBar.TabListener { 
    private ViewPager viewPager; 
    private TabsPagerAdapter mAdapter; 
    private ActionBar actionBar; 
    private ArrayList<TopRatedFragment> myFragmentList = new 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.getTabs(tab_name); 
       myFragmentList.add(fm); 
      } 


     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) { 
      } 
     }); 

    } 

    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; 

    } 

} 



Here is my FragmentPagerAdapter: 

    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) { 
     return myList.get(index); 

    } 

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

這裏是我的簡單的片段(現在):

public class TopRatedFragment extends Fragment { 

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


    } 

    public void getTabs(String tabs) { 
     Log.e("TRF", tabs); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_top_rated, container, false); 

     return rootView; 
    } 
} 

回答

0

創建一個靜態的newInstance方法創建片段和捆綁args作爲片段。拉動片段中的參數。

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

    setContentView(R.layout.activity_main); 


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




public class TopRatedFragment extends Fragment { 

public static Fragment newInstance(String position) { 
    TopRatedFragment f = new TopRatedFragment(); 
    // Supply num input as an argument. 
    Bundle args = new Bundle(); 
    args.putString("num", position); 
    f.setArguments(args); 
    return f; 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    Bundle b = getArguments(); 
    if (b!=null){ 
     String someText = b.containsKey("num")?b.getString("num"):null; 
    } 
+0

這不起作用,它不會通過Bundle發送任何東西。另外我試圖獲得當前選中的選項卡。 – 2014-09-05 12:22:39

+0

@MaxKleine它將標籤名稱發送到Bundle並在片段啓動時將其拉出到局部變量some​​Text中。對不起,我不知道如何獲取當前選中的標籤,因爲我的朋友指出了一個設計缺陷。 – danny117 2014-09-05 14:17:26