我在用着TabLayout
新的材料设计,我有一个问题,创建选项卡后我无法更新自定义视图的选项卡内容:
我可以用以下方法简化 PagerAdapter 中的方法
public View setTabView(int position, boolean selected) {
View v = LayoutInflater.from(context).inflate(R.layout.default_tab_view, null);
tv = (TextView) v.findViewById(R.id.tabTextView);
if(selected)
tv.setText("SELECTED");
else
tv.setText("UNSELECTED");
return v;
}
在活动中我可以通过以下方式简化我的代码:
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager());
pager.setAdapter(adapter);
tabLayout.setupWithViewPager(pager);
for (int i = 0; i < tabLayout.getTabCount(); i++) {
boolean isFirstTab = i == 0;
TabLayout.Tab tab = tabLayout.getTabAt(i);
View v;
v = adapter.setTabView(i, isFirstTab);
v.setSelected(isFirstTab);
tab.setCustomView(v);
}
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
adapter.setTabView(tab.getPosition(), true);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
adapter.setTabView(tab.getPosition(), false);
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
应用程序启动时选项卡的标题设置正确,但当我更改选项卡时,内容仍然保持不变。
Ok 我认为这是 android 设计支持库 v22 上的错误。
因为你正在谈论内容的变化,但我无法改变文本的颜色。创建选项卡后,如果更改布局,它将不会反映。
正如我所看到的,您正在使用 setCustomView 提供自定义布局。为了更改文本,您将再次调用 setTabView() 方法。相反,应该有 getCustomView() 方法,以便您可以更改布局。 TabLayout.Tab.getCustomView 中有一个方法,但它没有标识符,我已报告此错误。
https://code.google.com/p/android/issues/detail?id=177492 https://code.google.com/p/android/issues/detail?id=177492
[更新 08-07-2015]
最终 bug 被 android bug source traking 接受并标记为未来版本。所以我们可以说这个错误在未来的库中将不再存在。
我们可以有方法getCustomView()
这样我们就可以轻松获得我们的自定义视图。
[2015 年 8 月 18 日更新]
终于解决了bug 发布于v23 支持库。
只需使用 SDK 管理器更新支持库,您就可以将 getCustomView() 作为公共对象。
只需更改 gradle 中的这一行
compile 'com.android.support:design:23.0.0'
并确保编译和目标 sdk 设置为 23。
请检查我的代码对我来说工作正常
TabLayout.Tab tab=tabLayout.getTabAt(position);
View view=tab.getCustomView();
TextView txtCount= (TextView)
view.findViewById(R.id.txtCount);
txtCount.setText(count+"");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)