简体   繁体   English

在选项卡视图之间滑动几次后膨胀异常

[英]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. 我正在使用TabLayout设置与ViewPager一起使用以在3个片段之间滑动。 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. 该应用程序能够初始化选项卡之间的切换,但几次崩溃后,在我的第一个片段的onCreateView()方法中给了我一个Inflate Exception。 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. My Fragment类扩展了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. 我在其他Fragment类中使用与上面相同的方法。

Here's how I am setting up the TabLayout and the View Pager on my MainActivity: 以下是我在MainActivity上设置TabLayout和View Pager的方法:

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: 这是我的ViewPagerAdapter类:

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); 尝试添加viewPager.setOffscreenPageLimit(2);

This will prevent your view pager from destroying previous fragments.. So I hope you will not get that error. 这将阻止您的视图寻呼机破坏以前的片段..所以我希望你不会得到那个错误。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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