[英]TabLayout fragments are instantiated as the same when debugger is not connected
I have a TabLayout that uses a custom adaptor (TabPagerAdapter.java), it's initialised with this function (I previously had the problem that things didn't update when replaced so it removes everything before initializing): 我有一个使用自定义适配器(TabPagerAdapter.java)的TabLayout,它是使用此功能进行初始化的(我以前遇到的问题是,替换后事物没有更新,因此它在初始化之前会删除所有内容):
public boolean setPagerViewContents(int mode, ArrayList<String> titles) {
try {
mTabLayout.removeAllTabs();
mViewPager.setAdapter(null);
mViewPager.removeAllViews();
for (int i = 0; i < titles.size(); i++) {
mTabLayout.addTab(mTabLayout.newTab().setText(titles.get(i)));
}
mAdapter = new TabPagerAdapter(getSupportFragmentManager(), titles.size(), mode);
mViewPager.setAdapter(mAdapter);
mViewPager.invalidate();
return true;
} catch (Exception e) {
mErrorReporter.reportError(e);
return false;
}
}
Custom adapter (TabPageAdapter.java): 定制适配器(TabPageAdapter.java):
public class TabPagerAdapter extends FragmentStatePagerAdapter {
int mTabCount;
int mLayoutType;
public TabPagerAdapter(FragmentManager fm, int numberOfTabs, int layoutType) {
super(fm);
this.mTabCount = numberOfTabs;
this.mLayoutType = layoutType;
}
@Override
public Fragment getItem(int position) {
switch (mLayoutType) {
case 0:
switch (position) {
case 0:
return new Fragment15();
case 1:
return new Fragment1();
default:
return null;
}
case 1:
switch (position) {
case 0:
return new Fragment3();
case 1:
return new Fragment2();
default:
return null;
}
default:
return null;
}
}
@Override
public int getCount() {
return mTabCount;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
When the app starts the function setPagerViewContents
(with the right mode and titles) is called, after that mViewPager.setCurrentItem(number)
is called to display the right tab. 当应用程序启动时,将调用
setPagerViewContents
函数(具有正确的模式和标题),此后,将调用mViewPager.setCurrentItem(number)
以显示右侧的选项卡。 But now the fragment displayed in mViewPager is correct but when clicking on a tab title the fragment is the same displayed at start (the one with the index number
, not the one that should have been displayed), when tapping the first ( number
) tab again and then again to some other tab (not number
) the shown tab is correct. 但是现在在mViewPager中显示的片段是正确的,但是当点击第一个(
number
)选项卡时,单击选项卡标题时,片段在开始时显示的是相同的(带有索引number
的片段,而不是应该显示的片段)。一次又一次地转到其他选项卡(不是number
),显示的选项卡是正确的。
The most annoying thing here is that it's NOT consistent, it sometimes happens, sometimes doesn't and it doesn't happen when the debugger is attached so I can't debug it properly. 这里最令人讨厌的是,它不是一致的,有时会发生,有时不会,并且在连接调试器后也不会发生,因此我无法正确调试它。 If some other code is needed please do tell, I'll update this post as quick as possible because I'd really love to see this solved, for my own sanity and for the happiness of my few users.
如果需要其他代码,请告诉我,我将尽快更新此帖子,因为我真的很想看到此问题已解决,这是出于我个人的理智和为数不多的用户的幸福。
Change your following method: 更改您的以下方法:
public boolean setPagerViewContents(int mode, ArrayList<String> titles) {
try {
mAdapter = new TabPagerAdapter(getSupportFragmentManager(), titles.size(), mode);
mViewPager.setAdapter(mAdapter);
mTabLayout.setupWithViewPager(mViewPager);
return true;
} catch (Exception e) {
mErrorReporter.reportError(e);
return false;
}
}
and set text on tabs in TabPagerAdapter by overriding following method: 并通过覆盖以下方法在TabPagerAdapter中的选项卡上设置文本:
@Override
public CharSequence getPageTitle(int position) {
return context.getString(tabTitles[position]);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.