Android选项卡式活动:带有ViewPager的操作栏选项卡:每个选项卡的布局不同

时间:2015-02-11 23:56:51

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

我完全停电,我不熟悉片段。

我使用eclipse助手创建了一个新的Android项目:

enter image description here

这里是创建的默认类的片段:

    /**
 * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
 * one of the sections/tabs/pages.
 */
public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a PlaceholderFragment (defined as a static inner class
        // below).
        return PlaceholderFragment.newInstance(position + 1);
    }

    @Override
    public int getCount() {
        // Show 3 total pages.
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        Locale l = Locale.getDefault();
        switch (position) {
        case 0:
            return getString(R.string.title_section1).toUpperCase(l);
        case 1:
            return getString(R.string.title_section2).toUpperCase(l);
        case 2:
            return getString(R.string.title_section3).toUpperCase(l);
        }
        return null;
    }
}

/**
 * A placeholder fragment containing a simple view.
 */
public static class PlaceholderFragment extends Fragment {
    /**
     * The fragment argument representing the section number for this
     * fragment.
     */
    static int sec;
    private static final String ARG_SECTION_NUMBER = "section_number";

    /**
     * Returns a new instance of this fragment for the given section number.
     */
    public static PlaceholderFragment newInstance(int sectionNumber) {
        sec = sectionNumber;
        Log.i("ARG_SECTION_NUMBER"," "+sec);
        PlaceholderFragment fragment = new PlaceholderFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_SECTION_NUMBER, sectionNumber);
        fragment.setArguments(args);
        return fragment;
    }

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        int jjj = sec;

        Log.i("onCreateView"," "+sec);
        View rootView = inflater.inflate(R.layout.fragment_main, container,
                false);
        return rootView;
    }
}

SectionsPagerAdapter用作适配器并返回Fragments 3个片段具有相同的布局

fragment_main.xml

如何将不同的布局分配给3个片段?

PlaceholderFragment包含一个带有section_number:

的Bundle
args.putInt(ARG_SECTION_NUMBER, sectionNumber);

我可以使用此信息来确定每个片段中显示的布局吗?

    // Create the adapter that will return a fragment for each of the three
    // primary sections of the activity.
    mSectionsPagerAdapter = new SectionsPagerAdapter(
            getSupportFragmentManager());

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);

1 个答案:

答案 0 :(得分:2)

您需要为每个页面创建不同的类。页面从片段扩展。您可以为每个片段加载不同的layout-xml。

public class FirstFragment extends Fragment{

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {


    View rootView = inflater.inflate(R.layout.<yourxmlhere>, container,
            false);
    return rootView;
}

}

你知道有片段,但你的适配器仍然需要知道哪个页面(位置)是哪个片段。这由以下函数决定:

@Override
public Fragment getItem(int position) {
    switch (position){
    case 0:
    //page 1
    return new FirstFragment();
    break;

    case 1:
    //page 2
    return new SecondFragment();
    break;
    default:
    //this page does not exists
    return null;
}

确保您设置了正确的页数!

@Override
public int getCount() {
    //the amount of pages your adapter knows
    return <youramountofpages>;
}

这应该让你起步并运行。

编辑:你可以删除整个占位符片段类。它不再需要了。