Android 抓取片段中的文本

Android 抓取片段中的文本,android,android-fragments,android-actionbar,android-tabs,Android,Android Fragments,Android Actionbar,Android Tabs,我有一个包含11个选项卡和1个片段的操作栏。我还有一个ViewPager来显示片段。单击选项卡时,它会创建相同的片段。这些选项卡显示日期,因此每天都会更改。我需要的是将选项卡的文本(即getTabText())发送到片段,这将更改片段的内容。我在想怎么做时遇到了很多麻烦。以下是我的全部代码: public class MainActivity extends FragmentActivity implements ActionBar.TabListener { p

我有一个包含11个选项卡和1个片段的操作栏。我还有一个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();
    }

创建一个静态newInstance方法来创建片段并绑定片段的参数。拉片段中的arg

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

这不起作用,它不会通过包发送任何东西。我还试图获取当前选中的选项卡。@MaxKleine它将选项卡名称发送到Bundle中,并在片段开始时将其提取到局部变量someText中。抱歉,我不知道如何获取当前选定的选项卡,因为我的朋友指出了一个设计缺陷。
@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;
    }