11

我有一个简单的消息传递应用程序模块。其中,有两个可滑动的标签。接收和发送。假设我有 20 条消息,其中 10 条未读。所以我正在做的是将标签显示为 Received - (10)。现在,当我阅读邮件时,它会将邮件标记为已读。所以我想将标题从 Received - (10) 更改为 Received - (9)。

请让我知道我该怎么做?

这是我正在使用的代码。

@Override
public int getCount() {
    return 2;
}

@Override
public CharSequence getPageTitle(int position) {

    if (position == 0) {
        // if position is zero, set the title to RECEIVED.
        return "Received" + " (" + String.valueOf(intUnreadReceivedMessagesCount) + ")";
    } else {
        // if position is 1, set the title to SENT.
        return "Sent";
    }
}

我正在使用 Pager Sliding Tab Strip 作为 Pager Tab 库。https://github.com/astuetz/PagerSlidingTabStrip

我曾尝试使用 notifyDataSetChanged() 但出于明显的原因,它没有调用它。任何解决问题的方法。任何更好的显示和更新计数的替代方法也是受欢迎的。

谢谢你。

4

3 回答 3

15

这只是一个猜测,没有看到你的其余代码。

notifyDataSetChanged()应该可以工作,但有一个技巧。您必须覆盖适配器中的一种方法:

public int getItemPosition(Object item) {
    return POSITION_NONE;
}

这样调用 notifyDataSetChanged() 将更新当前可见的页面及其邻居。

没有它,只会更新新页面。

更新

我查看了链接库。notifyDataSetChanged()就像适配器一样,有一个公共方法。PagerSlidingTabStrip因此,只需在 XML中为其分配一个 id并在您的代码中获取引用。然后调用:

adapter.notifyDataSetChanged();
tabStrip.notifyDataSetChanged();
于 2014-08-07T20:26:48.447 回答
7

接受的答案对我不起作用,使用 customPagerAdapterandroid.support.design.widget.TabLayout标签。

这对我有用:

private void refreshTabTitles() {
    for (int i = 0; i < adapter.getCount(); i++) {
        Tab tab = tabs.getTabAt(i);
        if (tab != null) {
            tab.setText(adapter.getPageTitle(i));
        }
    }
}
于 2016-06-05T17:01:47.983 回答
0

使用PagerTabStrip

我只是从适配器的InstantiateItem方法内部调用

this.GetPageTitleFormatted(position);

瞧,它奏效了!

于 2017-04-09T12:36:47.683 回答