在标签浏览视图之间滑动几次后,会出现异常

时间:2016-06-16 00:20:03

标签: java android android-fragments android-viewpager android-tabs

我正在使用TabLayout设置与ViewPager一起使用以在3个片段之间滑动。该应用程序能够初始化选项卡之间的切换,但几次崩溃后,在我的第一个片段的onCreateView()方法中给了我一个Inflate Exception。这是错误代码:

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) 

以下是给出错误的代码:

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

My Fragment类扩展了android.support.v4.app.Fragment。 它只会在几次滑动后给出错误,而不是在我首先运行应用程序时。我在其他Fragment类中使用与上面相同的方法。

以下是我在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);
}

这是我的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;
}

}

我不知道出了什么问题,到处都看过这个错误,但我发现的情况与我的相似。感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

尝试添加viewPager.setOffscreenPageLimit(2);

这会阻止你的浏览寻呼机破坏以前的碎片..所以我希望你不会得到那个错误。