FragmentPagerAdapter动态更新标题

Rom*_*man 15 android android-fragments android-viewpager

我有一个带有FragmentPagerAdapter的ViewPager,它有3个片段.现在,我有许多项目作为片段标题一部分:

在此输入图像描述

因此,用户可以添加或删除这些项目,并且标题应相应更新.但是,这个标题似乎是静态的.

怎么能回忆一下这个方法来更新FragmentPagerAdapter的标题呢?

@Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0: return items + " (" + notFoundItems + ")";
            case 1: return found;
            case 2: return review;
        }
        return "";
    }
Run Code Online (Sandbox Code Playgroud)

我在SO上发现了几个类似的问题,但我需要更新标题,而不仅仅是片段本身.

ban*_*ing 8

正如其中的一条评论所暗示的那样,接受的答案对我来说有点矫枉过正.

根据弗兰克的回答,这就是我所做的:

public void myUpdatePageTitle(int pagePosition, int numItems) {
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    TabLayout.Tab tab = tabLayout.getTabAt(pagePosition);
    if (tab != null) {
        tab.setText(myCalcTabTitle(pagePosition, numItems));
    }
}

private String myCalcTabTitle(int pagePosition, int numItems) {
    //TODO - For this page, return whatever title string you like, including the numItems value. (The best way to do this is using a string resource that accepts a decimal parameter.)
}
Run Code Online (Sandbox Code Playgroud)


Rom*_*man 7

最后,我通过简单地重新设置寻呼机来解决它.

private OrdersTabsAdapter tabsAdapter;
@InjectView(R.id.tabs_orders) SlidingTabLayout ordersTabs;
@InjectView(R.id.pager) ViewPager pager;

public void update() {
  tabsAdapter.updateFragments(productId, status);
  ordersTabs.setViewPager(pager); //this helped with the titles
}
Run Code Online (Sandbox Code Playgroud)


ngo*_*goa 5

好的。所以你可以有一个方法FragmentPagerAdapter来更新notFoundItems, foundItems,的计数itemsForReview。更新它们后,调用notifyDataSetChanged().

 @Override
 public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0: return items + " (" + notFoundItems + ")";
            case 1: return found + " (" + foundItems + ")";
            case 2: return review + " (" + itemsForReview + ")";
        }
        return "";
 }
Run Code Online (Sandbox Code Playgroud)

此外,将此添加到您的FragmentPagerAdapter类实现中。因此,每当您有新的数据计数并想要更新标题时,请调用此方法。

 public void updateTitleData(int notFoundItems, int foundItems, int itemsForReview) {
      this.notFoundItems = notFoundItems;
      this.foundItems = foundItems;
      this.itemsForReview = itemsForReview;
      notifyDataSetChanged();
 }
Run Code Online (Sandbox Code Playgroud)


Fel*_*idh 5

您有 3 个片段,因此您将使用 3 个选项卡(第一个选项卡索引为 0,第二个选项卡索引为 1,第三个选项卡索引为 2)。使用索引获取您的选项卡并将其文本设置为标题。愿这对你有帮助,兄弟

例子:

TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.getTabAt(index).setText("");
Run Code Online (Sandbox Code Playgroud)