Android - TabLayout 中没有选项卡标题?
Android - No tab titles in TabLayout?
我用 viewpager 和 3 个片段创建了一个 tablayout。当我 运行 应用程序时,除了未显示的选项卡标题外,我可以正确看到所有内容,我错过了什么?
我的代码在mainactivity.oncreate:
tabLayout=findViewById(R.id.tab_layout);
viewPager= findViewById((R.id.view_pager));
final ViewPagerAdapter viewPagerAdapter= new ViewPagerAdapter(getSupportFragmentManager());
viewPagerAdapter.addFragment(RulesFragment.getInstance(), "TREE RULES");
viewPagerAdapter.addFragment(TreeFragment.getInstance(), "REGRESSION TREE");
viewPagerAdapter.addFragment(PredictionFragment.getInstance(), "PREDICTION");
rulesFragment= (RulesFragment) viewPagerAdapter.getItem(0);
treeFragment= (TreeFragment) viewPagerAdapter.getItem(1);
predictionFragment= (PredictionFragment) viewPagerAdapter.getItem(2);
viewPager.setAdapter(viewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
viewPager.setOffscreenPageLimit(3);
.xml 文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.viewpager.widget.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabIndicatorAnimationDuration="1000"
app:tabIndicatorColor="@android:color/holo_blue_dark"
app:tabIndicatorGravity="top"
app:tabSelectedTextColor="@android:color/holo_purple"
app:tabTextColor="@android:color/white"
app:tabBackground="@android:color/holo_orange_light">
</com.google.android.material.tabs.TabLayout>
</androidx.viewpager.widget.ViewPager>
</RelativeLayout>
我得到的:
在 .xml 中,我只添加了 viewpager 和 tablayout,我没有为选项卡标题添加任何文本视图或其他东西,因为我认为它会自动使用 tabLayout.setupWithViewPager(查看寻呼机)。有错吗?
在您的 ViewPagerAdapter 中实现 getPageTitle!
赞-
// Returns the page title for the top indicator
@Override
public CharSequence getPageTitle(int position) {
return "Page " + position;
}
参考你可以查看-
https://guides.codepath.com/android/viewpager-with-fragmentpageradapter
此外,您的 ViewPagerAdapter 不应保留 List<Fragment>
,因为这会在生产过程中进程终止后导致崩溃。实现 FragmentPagerAdapter 的正确方法是:
public class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public Fragment getItem(int position) {
if(position == 0) return new RulesFragment();
if(position == 1) return new TreeFragment();
if(position == 2) return new PredictionFragment();
throw new IllegalStateException("Unexpected position " + position);
}
@Override
public int getCount() {
return 3;
}
@Override
public CharSequence getPageTitle(int position) {
if(position == 0) return "TREE RULES";
if(position == 1) return "REGRESSION TREE";
if(position == 2) return "PREDICTION";
throw new IllegalStateException("Unexpected position " + position);
}
}
要获取对 ViewPager 创建的片段的引用,请使用以下 findFragmentByTag
方案:
Fragment fragment = supportFragmentManager.findFragmentByTag("android:switcher:" + viewPager.getId() + ":" + fragmentPosition)
我用 viewpager 和 3 个片段创建了一个 tablayout。当我 运行 应用程序时,除了未显示的选项卡标题外,我可以正确看到所有内容,我错过了什么?
我的代码在mainactivity.oncreate:
tabLayout=findViewById(R.id.tab_layout);
viewPager= findViewById((R.id.view_pager));
final ViewPagerAdapter viewPagerAdapter= new ViewPagerAdapter(getSupportFragmentManager());
viewPagerAdapter.addFragment(RulesFragment.getInstance(), "TREE RULES");
viewPagerAdapter.addFragment(TreeFragment.getInstance(), "REGRESSION TREE");
viewPagerAdapter.addFragment(PredictionFragment.getInstance(), "PREDICTION");
rulesFragment= (RulesFragment) viewPagerAdapter.getItem(0);
treeFragment= (TreeFragment) viewPagerAdapter.getItem(1);
predictionFragment= (PredictionFragment) viewPagerAdapter.getItem(2);
viewPager.setAdapter(viewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
viewPager.setOffscreenPageLimit(3);
.xml 文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.viewpager.widget.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabIndicatorAnimationDuration="1000"
app:tabIndicatorColor="@android:color/holo_blue_dark"
app:tabIndicatorGravity="top"
app:tabSelectedTextColor="@android:color/holo_purple"
app:tabTextColor="@android:color/white"
app:tabBackground="@android:color/holo_orange_light">
</com.google.android.material.tabs.TabLayout>
</androidx.viewpager.widget.ViewPager>
</RelativeLayout>
我得到的:
在 .xml 中,我只添加了 viewpager 和 tablayout,我没有为选项卡标题添加任何文本视图或其他东西,因为我认为它会自动使用 tabLayout.setupWithViewPager(查看寻呼机)。有错吗?
在您的 ViewPagerAdapter 中实现 getPageTitle!
赞-
// Returns the page title for the top indicator
@Override
public CharSequence getPageTitle(int position) {
return "Page " + position;
}
参考你可以查看-
https://guides.codepath.com/android/viewpager-with-fragmentpageradapter
此外,您的 ViewPagerAdapter 不应保留 List<Fragment>
,因为这会在生产过程中进程终止后导致崩溃。实现 FragmentPagerAdapter 的正确方法是:
public class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public Fragment getItem(int position) {
if(position == 0) return new RulesFragment();
if(position == 1) return new TreeFragment();
if(position == 2) return new PredictionFragment();
throw new IllegalStateException("Unexpected position " + position);
}
@Override
public int getCount() {
return 3;
}
@Override
public CharSequence getPageTitle(int position) {
if(position == 0) return "TREE RULES";
if(position == 1) return "REGRESSION TREE";
if(position == 2) return "PREDICTION";
throw new IllegalStateException("Unexpected position " + position);
}
}
要获取对 ViewPager 创建的片段的引用,请使用以下 findFragmentByTag
方案:
Fragment fragment = supportFragmentManager.findFragmentByTag("android:switcher:" + viewPager.getId() + ":" + fragmentPosition)