【问题标题】:Dynamically update title of Design Support TabLayout动态更新设计支持 TabLayout 的标题
【发布时间】:2016-01-17 01:32:38
【问题描述】:

有没有办法在设计支持 TabLayout 中动态更新选项卡的标题?我尝试在适配器中添加一个方法,该方法更改包含选项卡标题的 ArrayList 的内容并通知适配器,但选项卡标题不会更改为新标题。

适配器:

public class TabAdapter extends FragmentPagerAdapter {
    private final List<Fragment> fragments = new ArrayList<>();
    private final List<String> fragmentTiles = new ArrayList<>();

    public TabAdapter(FragmentManager fm) {
        super(fm);
    }

    public void addFragment(Fragment fragment, String title) {
        fragments.add(fragment);
        fragmentTiles.add(title);
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override
    public int getCount() {
        return fragments.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return fragmentTiles.get(position);
    }

    public void setFragmentTiles(int index, String title) {
        fragmentTiles.set(index, title);

        Log.e("ARRAY", fragmentTiles.toString());
    }
}

我正在像这样更改标题 ArrayList 的内容:

adapter.setFragmentTiles("New title 1");
adapter.setFragmentTiles("New title 2");
adapter.notifyDataSetChanged();

但这不起作用。我是否也必须更新 ViewPager 或 TabLayout?

【问题讨论】:

    标签: arraylist android-arrayadapter android-design-library androiddesignsupport android-tablayout


    【解决方案1】:

    对我有用的是在 Tab 上使用 setText 方法:

    即tab.setText(...); // 其中 ... 是 CharSequence 或 resId

    查看 TabLayout 可用的方法,您可以获得所需的索引/位置的 Tab 实例:

    例如tabLayout.getTabAt(...); // 其中 ... 是 int。

    据我所知,在适配器上调用 notifyDataSetChanged() 只是调用适配器的 getCount(),而不是像人们期望的那样刷新标题。

    希望这有助于或至少为您指明正确的方向。

    【讨论】:

    • 谢谢,我会尽快试试
    猜你喜欢
    • 2015-10-10
    • 2023-03-04
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    相关资源
    最近更新 更多