简体   繁体   中英

inflate exception after swiping between tab views a few times

I am using a TabLayout set to work with a ViewPager to swipe between 3 Fragments. The app is able to inialize an switch between tabs but after a few times it crashes and gives me an Inflate Exception in the onCreateView() method of my 1st fragment. Here is the error code:

06-16 10:38:26.721 8853-8853/com.dietando.gabriel.dietando E/AndroidRuntime: FATAL EXCEPTION: main
                                                                         Process: com.dietando.gabriel.dietando, PID: 8853
                                                                         android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class fragment
                                                                             at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
                                                                             at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
                                                                             at com.dietando.gabriel.dietando.Fragment2.onCreateView(Fragment2.java:34)
                                                                             at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974)
                                                                             at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
                                                                             at android.support.v4.app.FragmentManagerImpl.attachFragment(FragmentManager.java:1430)
                                                                             at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:728)
                                                                             at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)
                                                                             at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570)
                                                                             at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
                                                                             at android.support.v4.view.ViewPager.populate(ViewPager.java:1177)
                                                                             at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:608)
                                                                             at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:570)
                                                                             at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:551)
                                                                             at android.support.design.widget.TabLayout$ViewPagerOnTabSelectedListener.onTabSelected(TabLayout.java:2008)
                                                                             at android.support.design.widget.TabLayout.selectTab(TabLayout.java:1025)
                                                                             at android.support.design.widget.TabLayout.selectTab(TabLayout.java:995)
                                                                             at android.support.design.widget.TabLayout$Tab.select(TabLayout.java:1272)
                                                                             at android.support.design.widget.TabLayout$TabView.performClick(TabLayout.java:1377)
                                                                             at android.view.View$PerformClick.run(View.java:21147)
                                                                             at android.os.Handler.handleCallback(Handler.java:739)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                             at android.os.Looper.loop(Looper.java:148)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                             at java.lang.reflect.Method.invoke(Native Method)
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                          Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class fragment
                                                                             at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:782)
                                                                             at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
                                                                             at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
                                                                             at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
                                                                             at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
                                                                             at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
                                                                             at com.dietando.gabriel.dietando.Fragment2.onCreateView(Fragment2.java:34) 
                                                                             at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974) 
                                                                             at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
                                                                             at android.support.v4.app.FragmentManagerImpl.attachFragment(FragmentManager.java:1430) 
                                                                             at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:728) 
                                                                             at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) 
                                                                             at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570) 
                                                                             at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 
                                                                             at android.support.v4.view.ViewPager.populate(ViewPager.java:1177) 
                                                                             at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:608) 
                                                                             at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:570) 
                                                                             at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:551) 
                                                                             at android.support.design.widget.TabLayout$ViewPagerOnTabSelectedListener.onTabSelected(TabLayout.java:2008) 
                                                                             at android.support.design.widget.TabLayout.selectTab(TabLayout.java:1025) 
                                                                             at android.support.design.widget.TabLayout.selectTab(TabLayout.java:995) 
                                                                             at android.support.design.widget.TabLayout$Tab.select(TabLayout.java:1272) 
                                                                             at android.support.design.widget.TabLayout$TabView.performClick(TabLayout.java:1377) 
                                                                             at android.view.View$PerformClick.run(View.java:21147) 
                                                                             at android.os.Handler.handleCallback(Handler.java:739) 
                                                                             at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                             at android.os.Looper.loop(Looper.java:148) 
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                                             at java.lang.reflect.Method.invoke(Native Method) 
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                                                                          Caused by: java.lang.IllegalArgumentException: Binary XML file line #9: Duplicate id 0x7f0c0082, tag null, or parent id 0xffffffff with another fragment for com.dietando.gabriel.dietando.FragmentProgressBar
                                                                             at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2293)
                                                                             at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44)
                                                                             at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:186)
                                                                             at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:746)
                                                                             at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
                                                                             at android.view.LayoutInflater.rInflate(LayoutInflater.java:835) 
                                                                             at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 
                                                                             at android.view.LayoutInflater.inflate(LayoutInflater.java:515) 
                                                                             at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
                                                                             at com.dietando.gabriel.dietando.Fragment2.onCreateView(Fragment2.java:34) 
                                                                             at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974) 
                                                                             at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
                                                                             at android.support.v4.app.FragmentManagerImpl.attachFragment(FragmentManager.java:1430) 
                                                                             at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:728) 
                                                                             at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) 
                                                                             at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570) 
                                                                             at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 
                                                                             at android.support.v4.view.ViewPager.populate(ViewPager.java:1177) 
                                                                             at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:608) 
                                                                             at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:570) 
                                                                             at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:551) 
                                                                             at android.support.design.widget.TabLayout$ViewPagerOnTabSelectedListener.onTabSelected(TabLayout.java:2008) 
                                                                             at android.support.design.widget.TabLayout.selectTab(TabLayout.java:1025) 
                                                                             at android.support.design.widget.TabLayout.selectTab(TabLayout.java:995) 
                                                                             at android.support.design.widget.TabLayout$Tab.select(TabLayout.java:1272) 
                                                                             at android.support.design.widget.TabLayout$TabView.performClick(TabLayout.java:1377) 
                                                                             at android.view.View$PerformClick.run(View.java:21147) 
                                                                             at android.os.Handler.handleCallback(Handler.java:739) 
                                                                             at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                             at android.os.Looper.loop(Looper.java:148) 
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                                             at java.lang.reflect.Method.invoke(Native Method) 
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Here's the piece of code that is giving the error:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    return inflater.inflate(R.layout.fragment_2, container, false);
}

My Fragment class extends android.support.v4.app.Fragment. It only gives the error after a few swipes, not when I run the app at first. I use the same method as above in the other Fragment classes.

Here's how I am setting up the TabLayout and the View Pager on my MainActivity:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    // ViewPager
    ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager);
    setupViewPager(viewPager);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);

    tabLayout.getTabAt(0).setIcon(tabIcons[0]);
    tabLayout.getTabAt(1).setIcon(tabIcons[1]);
    tabLayout.getTabAt(2).setIcon(tabIcons[2]);

}

private void setupViewPager(ViewPager viewPager)
{
    Fragment2 f2 = new Fragment2();

    Fragment1 f1= new Fragment1();

    Fragment3 f3 = new Fragment3();

    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(f2, "ONE");
    adapter.addFragment(f3, "TWO");
    adapter.addFragment(f1, "THREE");
    viewPager.setAdapter(adapter);
}

And here's my ViewPagerAdapter class:

public class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<android.support.v4.app.Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();

public ViewPagerAdapter(FragmentManager manager)
{
    super(manager);
}

@Override
public android.support.v4.app.Fragment getItem(int position)
{
    return mFragmentList.get(position);
}

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

public void addFragment(android.support.v4.app.Fragment fragment, String title) {
    mFragmentList.add(fragment);
    mFragmentTitleList.add(title);
}

@Override
public CharSequence getPageTitle(int position)
{
    return null;
}

}

I have no idea what's wrong and have looked everywhere about this error but no case I found is similar to mine. Thank you for the help in advance.

Try adding viewPager.setOffscreenPageLimit(2);

This will prevent your view pager from destroying previous fragments.. So I hope you will not get that error.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM