4

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.

Gabriel Schneider
  • 605
  • 2
  • 6
  • 12
  • 1
    Please edit your question and provide the entire Java stack trace. We cannot really help you with just "android.view.InflateException: Binary XML file line #9: Error". – CommonsWare Jun 16 '16 at 00:24
  • Sorry, I already edited the question. – Gabriel Schneider Jun 16 '16 at 00:58
  • That is still not the entire Java stack trace. It cuts off part-way through a line, for example. More importantly, there should be 1+ "Caused by" stanzas showing wrapped exceptions, and it is in there that the real problem will show up. – CommonsWare Jun 16 '16 at 11:10
  • Now I believe it has the entire stack trace – Gabriel Schneider Jun 16 '16 at 13:42
  • 1
    Yes, that's better. There are a number of possible causes for that particular error. Search on `Duplicate id, tag null, or parent id 0xffffffff with another fragment` using your favorite search engine and you'll come up lots of Stack Overflow discussions like [this](http://stackoverflow.com/q/22702967/115145), [this](http://stackoverflow.com/a/14695397/115145), [this](http://stackoverflow.com/questions/15562416/error-inflating-class-fragment-duplicate-id-illegalargumentexception), and so on. Hopefully, one will match your situation. – CommonsWare Jun 16 '16 at 13:47

1 Answers1

3

Try adding viewPager.setOffscreenPageLimit(2);

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

Muhammad Ashraf
  • 1,252
  • 1
  • 14
  • 32