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上发现了几个类似的问题,但我需要更新标题,而不仅仅是片段本身.
正如其中的一条评论所暗示的那样,接受的答案对我来说有点矫枉过正.
根据弗兰克的回答,这就是我所做的:
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)
最后,我通过简单地重新设置寻呼机来解决它.
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)
好的。所以你可以有一个方法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)
您有 3 个片段,因此您将使用 3 个选项卡(第一个选项卡索引为 0,第二个选项卡索引为 1,第三个选项卡索引为 2)。使用索引获取您的选项卡并将其文本设置为标题。愿这对你有帮助,兄弟
例子:
TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.getTabAt(index).setText("");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9268 次 |
| 最近记录: |