在片段中抓取TabText

时间:2014-09-03 10:34:56

标签: android android-fragments android-actionbar android-tabs

我有一个包含11个标签和1个片段的ActionBar。我还有一个ViewPager来显示片段。单击选项卡时,它会创建相同的片段。选项卡显示日期,以便每天更改。我需要的是将选项卡的文本(即.getTabText())发送到片段,这将改变片段的内容。我在试图弄清楚如何做到这一点时遇到了很多麻烦。这是我的所有代码:

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

1 个答案:

答案 0 :(得分:0)

创建一个静态newInstance方法来创建片段并捆绑片段的args。拉出片段中的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;
    }