动态更改android.support.v4.view.PagerTitleStrip的标题

时间:2013-03-10 10:15:35

标签: android fragmentpageradapter

我在我的应用程序中使用PagerTitleStrip是currentky (文件:http://developer.android.com/reference/android/support/v4/view/PagerTitleStrip.html

一切正常,我设置了这样的标题:

public class PageAdapter extends FragmentPagerAdapter {

    private List<Fragment> fragments;

    public PageAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

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

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

    String[] titles = { "1", "2", "3", "4","5" };

    @Override
    public CharSequence getPageTitle(int position) {
        return titles[position];
    }
}

我现在关注的是,一旦第一个Fragment完成加载,我就必须更改条带的标题。

我已经尝试获取FragmentPagerAdapter并尝试操作它,但从未成功更改标题(文本)

确实有一个getPageTitle方法:mPagerAdapter.getPageTitle(position)但没有setPageTitle ...

有任何想法或建议吗?

2 个答案:

答案 0 :(得分:11)

如果我正确理解问题 - 您稍后会获得数据,然后想要更新titles数组并触发标题刷新。

如果是这种情况,只需触发PagerAdapter.notifyDataSetChanged();在调用该方法之后,Fragments将调用getPageTitle方法并自行更新。

答案 1 :(得分:-1)

有点丑陋的解决方案但工作:迭代到可视化树并自己设置文本

此外,您必须注意左侧有第一个透明/空白项

以下是更新第一个标题的代码(Xamarin)。

var firstHidedOneFound = false;
for (int i = 0; i < _tabstrip.ChildCount; ++i)
{
    var child = _tabstrip.GetChildAt(i) as TextView;

    if (child == null) { continue; }
    if (!firstHidedOneFound)
    {
        firstHidedOneFound = true;

        continue;
    }
    child.Text = ViewModel.MyShowPanelTitle;
    break;
}