目前我有七个标签,我最初只是空白,即""
。这些值将更改为我通过下面显示的方法调用传递的String[]
数组的值
所以我在我的一个课程中有这样的方法:
CustomTabAdapter customTabAdapter = new CustomTabAdapter();
customTabAdapter.setTabNames(temps);
基本上这会设置fragmentpager
的标签名称,但不会更新实际标签。当我通过temps
在此类中打印for loop
时,它会打印temps
中的所有名称 - 这意味着临时存在,但它永远不会更新标签。
我认为它没有更新,因为我没有覆盖CustomTabAdapter
课程中的原始值,但这里是我的CustomTabAdapter
课程:
public class CustomTabAdapter extends FragmentPagerAdapter {
String names[];
Context context;
public CustomTabAdapter(FragmentManager fragmentManager, Context context){
super(fragmentManager);
this.context = context;
names = new String[7];
Arrays.fill(names, "");
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
return new TabOne();
case 1:
return new TabTwo();
case 2:
return new TabThree();
case 3:
return new TabFour();
case 4:
return new TabFive();
case 5:
return new TabSix();
case 6:
return new TabSeven();
default:
return null;
}
}
public void setTabNames(String[] input){
names = Arrays.copyOf(input, input.length);
}
@Override
public int getCount() {
return names.length;
}
@Override
public CharSequence getPageTitle(int position) {
return names[position];
}
}
这是我的TabsGUI
,其中显示了所有标签:
public class TabsViewGUI extends AppCompatActivity {
TabLayout tabLayout;
ViewPager viewPager;
ActionBar actionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.users_page);
viewPager = (ViewPager) findViewById(R.id.viewPagerUsers);
CustomTabAdapter customTabAdapter = new CustomTabAdapter(getSupportFragmentManager(), TabsViewGUI.this);
viewPager.setAdapter(customTabAdapter);
viewPager.setOffscreenPageLimit(customTabAdapter.getCount());
populate();
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
//viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
//viewPager.setCurrentItem(tab.getPosition());
}
});
}
}
如何更新标签名称,因为它们目前似乎没有更新
由于
答案 0 :(得分:0)
我在更新名称后调用notifyDataSetChanged
刷新了标签名称
public void setTabNames(String[] input){
names = Arrays.copyOf(input, input.length);
notifyDataSetChanged()
}
来自PagerAdapter
javadoc:
如果支持此适配器的数据已更改且相关视图应更新,则应由应用程序调用此方法。
答案 1 :(得分:0)
我注意到在你的适配器中,你在每次getItem()调用后返回一个新的Fragment。您应该在返回之前设置片段的标题。
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
TabOne fragTab1 = new TabOne();
fragTab1.setTitle(names[position]);
return fragTab1;
(...)
default:
return null;
}
}