每个选项卡中有多个子片段的android viewpager

每个选项卡中有多个子片段的android viewpager,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,这让我头疼。假设我的应用程序有一个包含4个选项卡的ViewPager。我希望在每个选项卡中有多个子片段。这意味着每个选项卡将有不止一个视图。我完全不知道如何做到这一点 我有一个FragmentActivity,它首先加载并设置我的ViewPager 然后我有了我的碎纸机 以上内容将为我提供一个具有4个活动选项卡的工作ViewPager。然后我需要做所有4个片段。下面我举一个例子 public class FirstFrag extends Fragment { @Override

这让我头疼。假设我的应用程序有一个包含4个选项卡的ViewPager。我希望在每个选项卡中有多个子片段。这意味着每个选项卡将有不止一个视图。我完全不知道如何做到这一点

我有一个FragmentActivity,它首先加载并设置我的ViewPager

然后我有了我的碎纸机

以上内容将为我提供一个具有4个活动选项卡的工作ViewPager。然后我需要做所有4个片段。下面我举一个例子

public class FirstFrag extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.firstfrag, container, false);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);

        Button btn1 = (Button) getActivity().findViewById(R.id.btn1);
        btn1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                // what should I put in this block??????   
                Fragment fragment = new FirstFragSub1();
                FragmentTransaction transaction = getFragmentManager().beginTransaction();
                transaction.replace(R.id.pager, fragment); //<<------what should i replace???????
                transaction.commitAllowingStateLoss();
            }
        });
    }
}

有人能帮我吗?我真的不知道…谢谢这里有一个很棒的教程和github,详细介绍了这一点


这包括使用每个选项卡的多个视图处理backbackback和多个选项卡。希望这有助于我在阅读您的问题时寻找类似的解决方案。

视图中的框架布局因片段而膨胀。在CreateView中,用所需的子片段替换FrameLayout

另外,注意不要使用活动的FragmentManager。getFragmentManager返回活动的FragmentManager,这将导致不希望出现的结果ViewPager中只有一个片段会加载子片段。改为使用该函数

public class PagerAdapter extends FragmentPagerAdapter implements TextAndIconTabProvider {
    private final String[] TITLES = { "FIRST", "SECOND", "THIRD", "FORTH" };

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

    @Override
    public Fragment getItem(int position) {
        Fragment frag = new Fragment();
        switch (position) {
        case 1:
            frag = new FirstFrag();
            break;
        case 2:
            frag = new SecondFrag();
            break;
        case 3:
            frag = new ThirdFrag();
            break;
        case 4:
            frag = new ForthFrag();
            break;

        }

        return frag;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return TITLES.length;
    }
}
public class FirstFrag extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.firstfrag, container, false);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);

        Button btn1 = (Button) getActivity().findViewById(R.id.btn1);
        btn1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                // what should I put in this block??????   
                Fragment fragment = new FirstFragSub1();
                FragmentTransaction transaction = getFragmentManager().beginTransaction();
                transaction.replace(R.id.pager, fragment); //<<------what should i replace???????
                transaction.commitAllowingStateLoss();
            }
        });
    }
}
public class FirstFragSub1 extends ListFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        Log.i("FirstFragSub1","onCreateView is called");
        return inflater.inflate(R.layout.subone, container, false);
    }
}