0

I am using the method suggested here in order to implement swipeable tabs in Android using the SupportV4 library. In order to initialise the ViewPager, one has to create a page adapter which needs to be filled with a list of fragments/tabs, each associated with an activity, as shown here:

/**
 * Initialise ViewPager
 */
private void intialiseViewPager() {
    List<Fragment> fragments = new Vector<Fragment>();
    fragments.add(Fragment.instantiate(this, Tab1Fragment.class.getName()));
    fragments.add(Fragment.instantiate(this, Tab2Fragment.class.getName()));
    fragments.add(Fragment.instantiate(this, Tab3Fragment.class.getName()));
    this.mPagerAdapter  = new PagerAdapter(super.getSupportFragmentManager(), fragments);

    this.mViewPager = (ViewPager)super.findViewById(R.id.viewpager);
    this.mViewPager.setAdapter(this.mPagerAdapter);
    this.mViewPager.setOnPageChangeListener(this);
}

My question is: how can I dynamically populate the fragments list with tabs not associated with any class. For example a list of tabs in which the header of the tabs are obtained from an string array

4

1 に答える 1

0

どこかで、Android(またはそのようなもの)で使用されているため、クラス名PagerAdapterを使用できないと読んだので、クラス名ViewPagerAdapterを使用します...ページャーアダプターを次のように変更します...

public class ViewPagerAdapter extends FragmentPagerAdapter {
    ArrayList<TabInfo> tabs;
    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
        tabs = new ArrayList<tabInfo>();
    }
    @Override
    public Fragment getItem(int i) {
        return tabs.get(i).fragment;
    }
    @Override
    public int getCount() {
        return tabs.size();
    }
    @Override
    public CharSequence getPageTitle(int position) {
        return tabs.get(position).title;
    }
    public class TabInfo {
        public Fragment fragment;
        String title;
    }
    public void addTab(Fragment _fragment, String _title) {
        final TabInfo _tabInfo = new tabInfo();
        _tabInfo.fragment=_fragment;
        _tabInfo.title = _title;
        tabs.add(_pageInfo);
    }

そしてこれへのあなたの初期化...

private void intialiseViewPager() {
    this.mPagerAdapter  = new ViewPagerAdapter(super.getSupportFragmentManager());
    mPagerAdapter.addTab(Fragment.instantiate(this, Tab1Fragment.class.getName()));
    mPagerAdapter.addTab(Fragment.instantiate(this, Tab2Fragment.class.getName()));
    mPagerAdapter.addTab(Fragment.instantiate(this, Tab3Fragment.class.getName()));
    this.mViewPager = (ViewPager)super.findViewById(R.id.viewpager);
    this.mViewPager.setAdapter(this.mPagerAdapter);
    this.mViewPager.setOnPageChangeListener(this);
}

ArrayListにはインデックスがあり、使い慣れているので、必要に応じて任意のインデックス付きリストタイプを使用できます。

于 2012-11-12T07:35:45.077 に答える