当前位置: 首页 > 知识库问答 >
问题:

片段内部的ViewPager返回IllegalStateException

景成和
2023-03-14

我想创建带有PagerView的片段,但运行以下代码会返回一个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);
    }
}

IllegalStateException:

进程:com.company.user.blabla,pid:22256 java.lang.illegalstate异常:带有适配器的ViewPager com.company.user.blabla.fragments.homeFragment$pageradapter@ca3cef6需要一个视图id(位于android.support.v4.app.fragmentpageradapter.81)(位于android.support.v4.view.ViewPager.populate(位于ViewPager.java:1119)(位于android.support.v4.view.ViewPager.populate(位于:685)在Android.support.design.widget.AppBarLayout.OnMeasure(AppBarLayout.java:223)在Android.view.view.measure(view.java:21998)在Android.view.view.view.measureChild(viewgroup.java:6580)在Android.support.design.widget.coordinatorLayout.OnMeasureChild(coordinatorLayout.java:713)在1998)在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)在nal.policy.decorview.onMeasure(decorview.java:721)在Android.view.view.measure(view.java:21998)在Android.view.viewrootimpl.performMeasure(viewrootimpl.java:2410)在Android.view.viewrootimpl.measurehierarchy(viewrootimpl.java:1498)在Android.view.viewrootimpl.performtraversal(viewrootimpl.java:1751)在

我对安卓系统没有太多经验。搜索没有用或者我搜索不正确。我能做些什么来解决这个问题?

共有1个答案

束研
2023-03-14

您的pagerAdapter不是正确的流..请刷新此链接

https://guides.codepath.com/android/viewpager-with-fragmentpageradapter

希望这对你有帮助…

 类似资料:
  • 我有一个由片段填充的ViewPager。特别是,我有一个片段,它显示了Addresses对象的列表和一个允许创建新地址的列表。添加新地址的过程如下: 因此,当添加新地址时,我回到AddressListFragment,它是ViewPager中的活动地址。我需要更新该片段,以便更新列表与新添加的地址时,我回来它!我需要在那个片段上重写一个特定的方法吗? 提前道谢!

  • 在我的应用程序中,fragment活动包含两个片段,片段A和片段B,fragment B是一个包含3个片段的视图分页器。 在我的活动中,为了防止在配置更改时重新创建片段: 片段B的代码: 显然,在每次轮换时都要这样做: 这会导致整个寻呼机被重新创建,对吗?结果是 将在每次循环时被调用,碎片将从头创建并失去状态: 在中,但其结果是,在循环时,页面中的片段被移除。 有什么想法如何正确地保留在寻呼机内的

  • 我有一个有4个选项卡的ViewPager片段,在第4个选项卡中有另一个有3个选项卡的ViewPager,这样,如果每当我切换我的topviewPagerTab(一个有4个选项卡)时,就不会调用sub ViewPager(有3个选项卡)中的setUserVisiblehint片段。

  • 我有个问题。我有一个片段,里面包含了viewpager。对于viewpager,我使用FragmentPagerAdapter扩展。每个寻呼机片段内部都有回收器视图。问题是,在

  • 我有一个显示列表的导航抽屉和一个显示内容的视页。当单击导航抽屉上列表中的特定项目时,将为所有页面生成一个URL,该URL将导致视图分页程序内容的更改。导航抽屉和查看页处于相同的活动中。view pager中的片段具有从服务器检索内容的URL。我怎样才能找到它? 下面是一些代码: 查看页有三页。适配器如下: 这些页面都有一个URL字段,用于从包含数据的服务器中提取json。所以简而言之,问题是当导航

  • 我正在尝试将Map放入一个片段中。我正在粘贴我正在使用的代码 XML 下面是我声明的片段名称 下面是我如何初始化地图 这个方法是在onCreateView上调用的 错误是 请帮助解决此问题。问题在下面部分 编辑1 将xml更改为 和 和初始化 但同样的错误是 这发生在排队的时候 为什么会发生这种情况?? 编辑2 对getmap已弃用。所以我试过了 和 以及回调。。 和setUpMap方法 错误显示