Grab TabText in Fragment

杀马特。学长 韩版系。学妹 提交于 2019-12-12 05:04:32

问题


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

回答1:


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


来源:https://stackoverflow.com/questions/25642099/grab-tabtext-in-fragment

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!