将tab.getText()传递给片段

时间:2014-09-02 18:38:07

标签: android tabs android-viewpager

我有一个ViewPager和一个带有标签的ActionBar,可以在点击时更改片段。我想将选项卡的文本(即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;
}

}

1 个答案:

答案 0 :(得分: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) {
        }
    });

}

并在你的适配器中获取列表并根据它创建所有内容:

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

}

在此解决方案中,您只需更改String[] tabs

即可更改标签数量

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

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

    }

祝你好运!