1

正如您在Google上的代码中看到的那样,他们使用硬编码函数设置 TAB 标题。

@Override
public CharSequence getPageTitle(int position) {
    return "OBJECT " + (position + 1);
}

但我需要使用 XML 文件中的字符串来使 TABS 依赖于本地化/语言。我尝试了这个以及更多,但我不知道如何解决它。这不起作用,因为“无法从类型 Context 对非静态方法 getString(int) 进行静态引用”。任何帮助表示赞赏。

String [] titlesArray = new String []{ getString(R.string.TAB1), getString(R.string.TAB2), getString(R.string.TAB3), getString(R.string.TAB4), getString(R.string.TAB5), getString(R.string.TAB6)};

@Override
public CharSequence getPageTitle(int position) {
    return titlesArray [position];
}

解决方案:找到不使用 STATIC 上下文的方法。有可能的。

4

3 回答 3

0

我知道为时已晚,但我找到了一个可行的解决方案

像这样修改 PagerAdapter

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    Activity activity;
    static Context context;

    static Resources res = null;
    static String[] CONTENT = null;





    public SectionsPagerAdapter(FragmentManager fm, Activity activity, Context context) {
        super(fm);
        this.activity = activity;
        this.context = context;
        res = context.getResources();
        CONTENT = res.getStringArray(R.array.my_string_array);

    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0: {

                return new PlaceHolderSignInFragment();
            }
            case 1: {
                return new PlaceHolderSignUpFragment();
            }
        }
        return null;
    }

    @Override
    public int getCount() {
        return SectionsPagerAdapter.CONTENT.length;
    }

    @Override
    public CharSequence getPageTitle(int position) {

        return SectionsPagerAdapter.CONTENT[position];
    }

    public String[] getTitles() {
        return SectionsPagerAdapter.CONTENT;
    }
}

以防您将来需要发布!!!!

于 2015-03-05T14:33:59.780 回答
0

为什么不使用

        @Override
    public CharSequence getPageTitle(int position) {
        Locale l = Locale.getDefault();
        switch (position) {
            case 0:
                return getString(R.string.TAB1);
            case 1:
                return getString(R.string.TAB2);
            case 2:
                return getString(R.string.TAB3);
            case 3:
                return getString(R.string.TAB4);
            case 4:
                return getString(R.string.TAB5);
            ...AND SO ON...
        }
        return null;
    }
}
于 2013-09-07T12:19:55.230 回答
0

我认为你应该使用 Switch..Case.. 块

    @Override
    public CharSequence getPageTitle(int position) {

        Resources res = context.getResources();
        switch (position) {
        case 0:
            return res.getString(R.string.title_section1).toUpperCase();

        case 1:
            return res.getString(R.string.title_section2).toUpperCase();

        case 2:
            return res.getString(R.string.title_section3).toUpperCase();

        case 3:
            return res.getString(R.string.title_section4).toUpperCase();

        case 4:
            return res.getString(R.string.title_section5).toUpperCase();

        }
        return null;
    }
于 2013-09-07T12:19:03.457 回答