在片段抓住TabText [英] Grab TabText in Fragment

查看:118
本文介绍了在片段抓住TabText的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含11片和1个片段的动作条。我也有一个ViewPager显示片段(S)。当标签被点击它会创建相同的片段。这些选项卡显示日期,使他们每天都换。我需要的是发送标签的文字(即.getTabText())的片段,这将改变片段的内容。我有这么大的麻烦试图找出如何做到这一点。这是我所有的code:

 公共类MainActivity扩展FragmentActivity工具
        ActionBar.TabListener {
    私人ViewPager viewPager;
    私人TabsPagerAdapter mAdapter;
    私人ActionBar的动作条;
    私人的ArrayList< TopRatedFragment> myFragmentList =新的ArrayList< TopRatedFragment>();

    //标签标题
     的String []选项卡= {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(),};

    @覆盖
    保护无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);

        的setContentView(R.layout.activity_main);


          对于(字符串TAB_NAME:标签){
                TopRatedFragment FM =新TopRatedFragment();
                fm.getTabs(TAB_NAME);
                myFragmentList.add(FM);
            }


        viewPager =(ViewPager)findViewById(R.id.pager);
        动作条= getActionBar();
        mAdapter =新TabsPagerAdapter(getSupportFragmentManager(),myFragmentList);

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

        //添加标签
        对于(字符串TAB_NAME:标签){
            actionBar.addTab(actionBar.newTab()的setText(TAB_NAME)
                    .setTabListener(本));

        }

        actionBar.setSelectedNavigationItem(5);

        / **
         *上刷卡viewpager做出相应的选项卡中选择
         * * /
        viewPager.setOnPageChangeListener(新ViewPager.OnPageChangeListener(){

            @覆盖
            公共无效onPageSelected(INT位置){
                //在改变页面
                //使尊敬的选项卡中选择
                actionBar.setSelectedNavigationItem(位置);

            }

            @覆盖
            公共无效onPageScrolled(INT为arg0,浮动ARG1,ARG2 INT){
            }

            @覆盖
            公共无效onPageScrollStateChanged(INT为arg0){
            }
        });

    }

    公共字符串getTab(标签选项卡){
        返回tab.getText()的toString()。
    }

    @覆盖
    公共无效onTabReselected(TAB键,FragmentTransaction英尺){
    }

    @覆盖
    公共无效onTabSelected(TAB键,FragmentTransaction英尺){
        viewPager.setCurrentItem(tab.getPosition());


    }

    @覆盖
    公共无效onTabUnselected(TAB键,FragmentTransaction英尺){

    }

    公共字符串getCurrentDate(INT偏移){
        字符串calAsString;
        日期格式格式化=新的SimpleDateFormat(MM / DD);
        日历CAL = Calendar.getInstance();
            cal.add(Calendar.DATE,偏移量);
            calAsString = formatter.format(cal.getTime());
        返回calAsString;

    }

}



这是我的FragmentPagerAdapter:

    公共类TabsPagerAdapter扩展FragmentPagerAdapter {
    ArrayList的< TopRatedFragment> myList中;

    公共TabsPagerAdapter(FragmentManager FM,ArrayList的< TopRatedFragment> myList中){
        超(FM);
        this.myList = myList中;
    }

    @覆盖
    公共片段的getItem(INT指数){
         返回myList.get(指数);

    }

    @覆盖
    公众诠释getCount将(){
        //获取项目计数 - 等于标签数
        返回myList.size();
    }
 

这里是我的简单的片段(现在):

 公共类TopRatedFragment扩展片段{

    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);


    }

    公共无效getTabs(字符串标签){
        Log.e(成绩单,制表符);
    }

    @覆盖
    公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,
            捆绑savedInstanceState){
        查看rootView = inflater.inflate(R.layout.fragment_top_rated,集装箱,假);

        返回rootView;
    }
}
 

解决方案

创建一个静态的newInstance方法创建片段捆绑args作为片段。在片段拉动的args。

  @覆盖
保护无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);

    的setContentView(R.layout.activity_main);


      对于(字符串TAB_NAME:标签){
            TopRatedFragment FM =新TopRatedFragment.newInstance(TAB_NAME);
            fm.getTabs(TAB_NAME);
            myFragmentList.add(FM);
        }




公共类TopRatedFragment扩展片段{

公共静态片段的newInstance(字符串位置){
    TopRatedFragment F =新TopRatedFragment();
    //供应NUM输入作为参数。
    捆绑的args =新包();
    args.putString(民,位置);
    f.setArguments(参数);
    返回F;
}

@覆盖
公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,
        捆绑savedInstanceState){

    叠B = getArguments();
    如果(B!= NULL){
        字符串someText = b.containsKey(民)b.getString(民):空;?
    }
 

I have an ActionBar that contains 11 tabs and 1 fragment. I also have a ViewPager to display the fragment(s). When a tab is clicked it creates the same fragment. The tabs display dates so they change everyday. What I need is to send the text of the tab (ie. .getTabText()) to the fragment, this will change the content of the fragment. I am having so much trouble trying to figure out how to do this. Here is all my code:

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

And here is my simple fragment (for now):

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

解决方案

Create a static newInstance method to create fragment and bundle the args for the fragment. Pull the args in the fragment.

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

这篇关于在片段抓住TabText的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆