我有一个
TabLayout
(来自设计库),其中通过 FragmentPagerAdapter
填充了 2 个片段(都包含项目列表)。
这两个名单是相互关联的:它们都包含总共人数,一个人在哪一个名单中,决定他/她是否被提名。 您可以将成员从一个列表滑动到另一个列表,反之亦然。
问题
我想/需要在选项卡标题中显示计数(该特定列表中有多少人)。 很简单,我在
getPageTitle
中添加了一些代码,它工作得很好。
直到我更改列表,我需要告诉 FragmentPagerAdapter
再次更新其标题:不会。
到目前为止,我找到的唯一解决方案是致电:
mTabLayout.setTabsFromPagerAdapter(mAdapter);
此方法所做的就是
removeAllTabs
,然后循环遍历 FragmentPagerAdapter
所具有的内容,将它们添加为新的。
这适用于标题,但效率不高,但最重要的是:它强制第一个选项卡再次成为所选项目,从第二个选项卡滑动时,这不是一个很好的体验。
我尝试在
mViewPager.setCurrentItem(int item)
调用后添加 mTabLayout.setTabsFromPagerAdapter(mAdapter);
,但这不起作用。
我也尝试过类似的事情
mAdapter.notifyDataSetChanged();
tabLayout.invalidate();
没有效果。
您可以使用此代码
tabLayout.getTabAt(pos)).view.getTab().setText(title);
这就是我正在做的,我有要求,每次都需要为选项卡标题设置一些计数。
我使用自定义布局作为选项卡标题。这是我的自定义选项卡布局
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/colorAccent"
android:textSize="@dimen/tab_label" />
设置标题 第一次我使用我的方法 setupTabTitle("TAB 1",0);
private void setupTabTitle(String title,int pos) {
TextView title = (TextView) LayoutInflater.from(this).
inflate(R.layout.custom_tab, null);
title .setText(title);
// set icon
// title .setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.ic_tab_favourite, 0, 0);
tabLayout.getTabAt(pos).setCustomView(title);
}
要更新选项卡标题下次我使用 tabLayout.getTabAt() 对象
public void updateCustomTabTitle(String title,int pos) {
TextView tabTitle = (TextView) tabLayout.getTabAt(pos).getCustomView();
tabTitle.setText(title);
}
这就是我调用 updateCustomTabTitle 方法的方式
updateCustomTabTitle("My tab title to update",tabLayout.getSelectedTabPosition());
获取选项卡标题值
public String getCustomTabTitle(int pos) {
TextView tabOne= (TextView) tabLayout.getTabAt(pos).getCustomView();
return tabOne.getText().toString();
}
note:首先我尝试了 setupTabTitle 方法来更新选项卡标题,但它不会更新标题,它会在标题末尾附加新文本。所以我从选项卡布局获取视图并使用它来更新和读取选项卡值。
希望这对您有帮助。