仅使用一个页面的ViewPager:
这是2021年2月:我已经能够使用ViewPager、FragmentPagerAdapter、Tablayout和Fragment来添加一个页面。在我的情况下,我可以使用许多选项卡填充许多页面,或者只使用一个选项卡填充一个页面。当只有一个选项卡和一个页面时,向左或向右滑动可以管理文档的章节(我想要显示下一章)。而当有许多页面和许多选项卡时,我可以更改整本书的文档。
在主Activity Oncreate中(这是我的工作代码方法,我没有改变任何东西):
if(getIntent()!=null){
if(getIntent().getStringExtra("ONLY_TAFHEEM")!=null)
sectionsPagerAdapter = new SectionsPagerAdapter(this, getSupportFragmentManager(), suraName, suraId, ayatId, true);
else
sectionsPagerAdapter = new SectionsPagerAdapter(this, getSupportFragmentManager(), suraName, suraId, ayatId, false);
}else {
sectionsPagerAdapter = new SectionsPagerAdapter(this, getSupportFragmentManager(), suraName, suraId, ayatId, false);
}
final ViewPager viewPager = findViewById(R.id.view_pager);
viewPager.setAdapter(sectionsPagerAdapter);
tabsLayout = findViewById(R.id.tabs);
tabsLayout.animate();
tabsLayout.setupWithViewPager(viewPager);
在适配器中:
@NonNull
@Override
public Fragment getItem(int position) {
return PlaceholderFragment.sendData(mContext, postion, suraName, suraId, ayahId, ARABIC_AYAH, BENGALI_AYAH, actualDbNames[position], tafsirDisplayNames[position]);
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return tafsirDisplayNames[position];
}
@Override
public int getCount() {
return tafsirDisplayNames.length;
}
最后是碎片公共构造函数:
public static PlaceholderFragment sendData(Context mContext, int tabIndex, String suraName, String suraId, String ayahNumber, String arabicAyah, String bengaliAyah, String actualDbName, String displayDbName) {
Log.i("PlaceHolder", "Tafhim sendData: " + bengaliAyah);
PlaceholderFragment fragment = new PlaceholderFragment();
Bundle bundle = new Bundle();
mContext_ = mContext;
BENGALI_AYAH = bengaliAyah;
_DISPLAY_DB_NAME = displayDbName;
bundle.putInt(ARG_SECTION_NUMBER, tabIndex);
bundle.putString(SURA_NAME, suraName);
bundle.putString(SURA_ID, suraId);
bundle.putString(AYAH_NUMBER, ayahNumber);
bundle.putString(ARABIC_AYAH, arabicAyah);
bundle.putString(ACTUAL_DB_NAME, actualDbName);
bundle.putString(DISPLAY_DB_NAME, displayDbName);
fragment.setArguments(bundle);
return fragment;
}
只需要将标签数组(选项卡标签)传递给适配器即可(如果只有一个元素,则仅为一页),根据我的需求,我可以填充一个或多个页面,并根据此填充一个或多个选项卡:在上面的代码中,数组是:tafsirDisplayNames
。当适配器首次调用时,我也可以手动创建数组,或在重新创建MainActivity时使用+-元素重新创建数组。
ViewPager.setOffscreenPageLimit(2)
对我有效。尝试使用ViewPager.setOffscreenPageLimit(totTabs - 1)
。 - sibin