gpt4 book ai didi

java - 在选项卡 View 之间滑动几次后膨胀异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:20:47 24 4
gpt4 key购买 nike

我正在使用 TabLayout 集与 ViewPager 一起在 3 个 fragment 之间滑动。该应用程序能够初始化选项卡之间的切换,但几次后它崩溃并在我的第一个 fragment 的 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) 

这是给出错误的代码 fragment :

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

我的 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);

这将防止您的 View 寻呼机破坏以前的 fragment 。所以我希望您不会遇到该错误。

关于java - 在选项卡 View 之间滑动几次后膨胀异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37847888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com