java - Fragment 中的 ViewPager 返回 IllegalStateException

标签 java android android-fragments android-viewpager

我想在 fragment 中使用 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:

Process: com.company.user.blabla, PID: 22256 java.lang.IllegalStateException: ViewPager with adapter com.company.user.blabla.fragments.HomeFragment$PagerAdapter@ca3cef6 requires a view id at android.support.v4.app.FragmentPagerAdapter.startUpdate(FragmentPagerAdapter.java:81) at android.support.v4.view.ViewPager.populate(ViewPager.java:1119) at android.support.v4.view.ViewPager.populate(ViewPager.java:1087) at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1613) at android.view.View.measure(View.java:21998) at android.support.v7.widget.Toolbar.measureChildCollapseMargins(Toolbar.java:1547) at android.support.v7.widget.Toolbar.onMeasure(Toolbar.java:1655) at android.view.View.measure(View.java:21998) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514) at android.widget.LinearLayout.measureVertical(LinearLayout.java:806) at android.widget.LinearLayout.onMeasure(LinearLayout.java:685) at android.support.design.widget.AppBarLayout.onMeasure(AppBarLayout.java:223) at android.view.View.measure(View.java:21998) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:713) at android.support.design.widget.AppBarLayout$Behavior.onMeasureChild(AppBarLayout.java:1040) at android.support.design.widget.AppBarLayout$Behavior.onMeasureChild(AppBarLayout.java:770) at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:783) at android.view.View.measure(View.java:21998) at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:1080) at android.view.View.measure(View.java:21998) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139) at android.view.View.measure(View.java:21998) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514) at android.widget.LinearLayout.measureVertical(LinearLayout.java:806) at android.widget.LinearLayout.onMeasure(LinearLayout.java:685) at android.view.View.measure(View.java:21998) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at android.view.View.measure(View.java:21998) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514) at android.widget.LinearLayout.measureVertical(LinearLayout.java:806) at android.widget.LinearLayout.onMeasure(LinearLayout.java:685) at android.view.View.measure(View.java:21998) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at com.android.internal.policy.DecorView.onMeasure(DecorView.java:721) at android.view.View.measure(View.java:21998) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2410) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1498) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1751) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1386) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6733) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911) at android.view.Choreographer.doCallbacks(Choreographer.java:723) at android.view.Choreographer.doFrame(Choreographer.java:658) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897) at android.os.Handler.handleCallback(Handler.java:789) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:164)

我在 android 方面没有太多经验。搜索没有用,或者我搜索不正确。我该怎么做才能解决这个问题?

最佳答案

您的 pagerAdapter 流程​​不正确。请引用此链接

https://guides.codepath.com/android/ViewPager-with-FragmentPagerAdapter

希望对你有帮助

关于java - Fragment 中的 ViewPager 返回 IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45698411/

相关文章:

android - 下拉项的 AutoCompleteTextView 边距

android - (实例中缺少 Vulkan 1.0 API)通过 Android Studio 3.5 和 3.6 Canary 9 启动 Android Emulator(Q API 29)时

android - 无法为我的 webview 解析方法 'findViewById(int)'

java - 如何在 DialogFragment 中设置一分钟间隔

java - JTable 和 DefaultTableModel 不刷新表数据

java - 在 Java 中使用 `apache-commons` 、 `guava` 或其他一些流行的库将迭代器转换为可变列表的方法

java - 访问 ArrayList 中的对象类变量 (java)

java - DDMS 分配跟踪器填充了 "SimpleListIterator"

android - 为什么我的 Fragment 没有实例化? Activity 到 Fragments 的通信

android - 带有文本和图像的 Facebook 墙贴