簡體   English   中英

片段內的ViewPager返回IllegalStateException

[英]ViewPager inside Fragment returns IllegalStateException

我想在片段內使用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.IllegalStateException:帶有適配器com.company.user.blabla.fragments.HomeFragment$PagerAdapter@ca3cef6的ViewPager需要在android.support.v4.app上具有視圖ID。 android.support.v4.view.ViewPager.populate(ViewPager.java:1119)上的FragmentPagerAdapter.startUpdate(FragmentPagerAdapter.java:81)在android.support.v4.view.ViewPager.populate(ViewPager.java:1087) .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.measureVertical(LinearLayout.java:806)在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.AppBarLayout $ Behavior.onMeasureChild(AppBarLayout.java:1040),位於android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:713),位於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。在android.view.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580)在android.view.View.measure(View.java:21998)在support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:1080) .FrameLayout.onMeasure(FrameLayout.java:185)在android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)在android.view.View.measure(View.java:2) 1998年)在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580)在android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)在android.widget.LinearLayout.measureVertical(LinearLayout.java:806)在android。在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580)在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580)在android.view.View.measure(View.java:21998)的widget.LinearLayout.onMeasure(LinearLayout.java:685) (FrameLayout.java:185)在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.view.View.measure(View.java:21998)。 com.android.inter上android.widget.FrameLayout.onMeasure(FrameLayout.java:185)上的view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) nal.policy.DecorView.onMeasure(DecorView.java:721)在android.view.View.measure(View.java:21998)在android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2410)在android.view.ViewRootImpl android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1751)處的.measureHierarchy(ViewRootImpl.java:1498)android.view.ViewRootImpl $ TraversalRunnable處的android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1386) android.view.Choreographer $ CallbackRecord.run(Choreographer.java:911)的ViewRootImpl.java:6733)android.view.Choreographer.doCallbacks(Choreographer.java:723)的android.view.Choreographer.doFrame(Choreographer.java) :658)在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:897)在android.os.Handler.handleCallback(Handler.java:789)在android.os.Handler.dispatchMessage(Handler.java:98)在android.os.Looper.loop(Looper.java:164)

我在android上沒有太多經驗。 搜索沒有用,或者我搜索不正確。 我該怎么做才能解決這個問題?

您的pagerAdapter流量不正確。

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

希望這個能對您有所幫助..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM