设置viewpager的每个选项卡的名称

时间:2016-03-10 18:30:26

标签: android android-viewpager fragmentpageradapter

目前我有七个标签,我最初只是空白,即""。这些值将更改为我通过下面显示的方法调用传递的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());
            }
        });
    }
}

如何更新标签名称,因为它们目前似乎没有更新

由于

2 个答案:

答案 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;
    }
}