Java 片段内的ViewPager返回IllegalStateException

Java 片段内的ViewPager返回IllegalStateException,java,android,android-fragments,android-viewpager,Java,Android,Android Fragments,Android Viewpager,我希望创建带有PagerView inside fragment的选项卡,但运行以下代码会返回IllegalStateException: 源代码: public class HomeFragment extends Fragment { private TabLayout tabs; private ClassesFragment classesFragment; private ExamsFragment examsFragment; @Override public void onC

我希望创建带有PagerView inside fragment的选项卡,但运行以下代码会返回IllegalStateException:

源代码:

public class HomeFragment extends Fragment {

private TabLayout tabs;
private ClassesFragment classesFragment;
private ExamsFragment examsFragment;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    classesFragment = new ClassesFragment();
    examsFragment = new ExamsFragment();
}

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

    View v = inflater.inflate(R.layout.fragment_main_classes, container, false);
    Toolbar toolbar = getActivity().findViewById(R.id.toolbar);

    ViewPager viewPager = new ViewPager(getContext());
    viewPager.setLayoutParams(new Toolbar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
    setupViewPager(viewPager);
    toolbar.addView(viewPager);

    tabs = new TabLayout(getContext());
    tabs.setLayoutParams(new Toolbar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
    toolbar.addView(tabs);
    tabs.setupWithViewPager(viewPager);
    return v;
}

// Add Fragments to Tabs
private void setupViewPager(ViewPager viewPager) {
    PagerAdapter adapter = new PagerAdapter(getChildFragmentManager());
    adapter.addFragment("Занятия", ExamsFragment.newInstance());
    viewPager.setAdapter(adapter);
}

private class PagerAdapter extends FragmentPagerAdapter {
    private List<Fragment> fragments = new ArrayList<>();
    private List<String> titles = new ArrayList<>();

    public PagerAdapter(FragmentManager fm) {
        super(fm);
        fragments.add(ExamsFragment.newInstance());
        titles.add("new");
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    public void addFragment(String title, Fragment fragment)
    {
        titles.add(title);
        fragments.add(fragment);
    }

    @Override
    public int getCount() {
        return fragments.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return titles.get(position);
    }
}
公共类HomeFragment扩展了片段{
专用标签;
私有类片段类片段;
私有ExamsFragment ExamsFragment;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
classesFragment=新的classesFragment();
examsFragment=新的examsFragment();
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图v=充气机。充气(R.layout.fragment\u主类,容器,假);
Toolbar Toolbar=getActivity().findViewById(R.id.Toolbar);
ViewPager ViewPager=新的ViewPager(getContext());
viewPager.setLayoutParams(新工具栏.LayoutParams(ViewGroup.LayoutParams.MATCH_父级,ViewGroup.LayoutParams.MATCH_父级));
设置viewPager(viewPager);
工具栏.添加视图(viewPager);
tabs=newtablayout(getContext());
tabs.setLayoutParams(新工具栏.LayoutParams(ViewGroup.LayoutParams.MATCH_父项,ViewGroup.LayoutParams.WRAP_内容));
工具栏。添加视图(选项卡);
选项卡。使用viewPager进行设置(viewPager);
返回v;
}
//将片段添加到选项卡
专用无效设置ViewPager(ViewPager ViewPager){
PagerAdapter适配器=新的PagerAdapter(getChildFragmentManager());
adapter.addFragment(“ааааааб”,examfragment.newInstance());
viewPager.setAdapter(适配器);
}
私有类PagerAdapter扩展了FragmentPagerAdapter{
私有列表片段=新的ArrayList();
私有列表标题=新的ArrayList();
公共页雷达(碎片管理器fm){
超级(fm);
add(ExamsFragment.newInstance());
标题。添加(“新”);
}
@凌驾
公共片段getItem(int位置){
返回碎片。获取(位置);
}
public void addFragment(字符串标题,片段)
{
标题。添加(标题);
片段。添加(片段);
}
@凌驾
public int getCount(){
返回fragments.size();
}
@凌驾
公共字符序列getPageTitle(int位置){
返回标题。获取(位置);
}
}

非法州例外情况:

public class HomeFragment extends Fragment {

private TabLayout tabs;
private ClassesFragment classesFragment;
private ExamsFragment examsFragment;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    classesFragment = new ClassesFragment();
    examsFragment = new ExamsFragment();
}

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

    View v = inflater.inflate(R.layout.fragment_main_classes, container, false);
    Toolbar toolbar = getActivity().findViewById(R.id.toolbar);

    ViewPager viewPager = new ViewPager(getContext());
    viewPager.setLayoutParams(new Toolbar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
    setupViewPager(viewPager);
    toolbar.addView(viewPager);

    tabs = new TabLayout(getContext());
    tabs.setLayoutParams(new Toolbar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
    toolbar.addView(tabs);
    tabs.setupWithViewPager(viewPager);
    return v;
}

// Add Fragments to Tabs
private void setupViewPager(ViewPager viewPager) {
    PagerAdapter adapter = new PagerAdapter(getChildFragmentManager());
    adapter.addFragment("Занятия", ExamsFragment.newInstance());
    viewPager.setAdapter(adapter);
}

private class PagerAdapter extends FragmentPagerAdapter {
    private List<Fragment> fragments = new ArrayList<>();
    private List<String> titles = new ArrayList<>();

    public PagerAdapter(FragmentManager fm) {
        super(fm);
        fragments.add(ExamsFragment.newInstance());
        titles.add("new");
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    public void addFragment(String title, Fragment fragment)
    {
        titles.add(title);
        fragments.add(fragment);
    }

    @Override
    public int getCount() {
        return fragments.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return titles.get(position);
    }
}
流程:com.company.user.blabla,PID:22256 java.lang.IllegalStateException:带适配器的ViewPager com.company.user.blabla.fragments.HomeFragment$PagerAdapter@ca3cef6需要视图id 在android.support.v4.app.FragmentPagerAdapter.startUpdate(FragmentPagerAdapter.java:81)上 在android.support.v4.view.ViewPager.populate上(ViewPager.java:1119) 位于android.support.v4.view.ViewPager.populate(ViewPager.java:1087) 在android.support.v4.view.ViewPager.onMeasure上(ViewPager.java:1613) 在android.view.view.measure上(view.java:21998) 位于android.support.v7.widget.Toolbar.measureChildCollapseMargins(Toolbar.java:1547) 位于android.support.v7.widget.Toolbar.onMeasure(Toolbar.java:1655) 在android.view.view.measure上(view.java:21998) 位于android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) 位于android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514) 位于android.widget.LinearLayout.measureVertical(LinearLayout.java:806) 位于android.widget.LinearLayout.onMeasure(LinearLayout.java:685) 位于android.support.design.widget.AppBarLayout.onMeasure(AppBarLayout.java:223) 在android.view.view.measure上(view.java:21998) 位于android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) 位于android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:713) 位于android.support.design.widget.AppBarLayout$Behavior.onMeasureChild(AppBarLayout.java:1040) 位于android.support.design.widget.AppBarLayout$Behavior.onMeasureChild(AppBarLayout.java:770) 位于android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:783) 在android.view.view.measure上(view.java:21998) 位于android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:1080)