簡體   English   中英

在選項卡視圖之間滑動幾次后膨脹異常

[英]inflate exception after swiping between tab views a few times

我正在使用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;
}

}

我不知道什么是錯的,並且到處都看到了這個錯誤,但我發現的情況與我的相似。 感謝您的幫助。

嘗試添加viewPager.setOffscreenPageLimit(2);

這將阻止您的視圖尋呼機破壞以前的片段..所以我希望你不會得到那個錯誤。

暫無
暫無

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

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