如何在ViewPager适配器中获取String资源?

use*_*699 10 android android-viewpager android-resources

我试图为我的viewpager设置标题,我似乎无法让它工作.我尝试过Resources.getSystem().getString(R.string.title1); 并试图传递一个上下文.谁能帮助我?

public class ViewPagerAdapter extends FragmentPagerAdapter {
    final int PAGE_COUNT = 3;
    Context context;

    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public int getCount() {
        return PAGE_COUNT;
    }

    @Override
    public Fragment getItem(int position) {
        return PageFragment.create(position + 1);
    }

    @Override
    public CharSequence getPageTitle(int position) {

        switch (position) {

        case 0:
            return Resources.getSystem().getString(R.string.title1);

        case 1:
            return Resources.getSystem().getString(R.string.title1);

        case 2:
            return Resources.getSystem().getString(R.string.title1);
        }

        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

logcat的:

09-02 17:40:33.160: E/AndroidRuntime(3116): FATAL EXCEPTION: main
09-02 17:40:33.160: E/AndroidRuntime(3116): android.content.res.Resources$NotFoundException: String resource ID #0x7f050003
09-02 17:40:33.160: E/AndroidRuntime(3116):     at android.content.res.Resources.getText(Resources.java:230)
09-02 17:40:33.160: E/AndroidRuntime(3116):     at android.content.res.Resources.getString(Resources.java:314)
Run Code Online (Sandbox Code Playgroud)

Ali*_*imi 39

你应该从活动的上下文中调用getString,将代码更改为

public class ViewPagerAdapter extends FragmentPagerAdapter {
    final int PAGE_COUNT = 3;
    Context context;

    public ViewPagerAdapter(FragmentManager fm, Context nContext) {
        super(fm);
        context = nContext;
    }

    @Override
    public int getCount() {
        return PAGE_COUNT;
    }

    @Override
    public Fragment getItem(int position) {
        return PageFragment.create(position + 1);
    }

    @Override
    public CharSequence getPageTitle(int position) {

        switch (position) {

        case 0:
            return context.getString(R.string.title1);

        case 1:
            return context.getString(R.string.title1);

        case 2:
            return context.getString(R.string.title1);
        }

        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)


Phi*_*oda 10

那么,根据您的错误消息,您没有包含您请求的ID的字符串.

可能是你支持多种语言并且只有特定语言的这种String-ID?

无论如何,这行代码:

String yourstring = getResources().getString(R.string.yourstring);
Run Code Online (Sandbox Code Playgroud)

是如何从Resources获取String.

  • 无法访问 getResources() (6认同)

Fra*_*osi 7

如果您尝试从活动外部访问字符串资源,那么您需要将上下文传递给该类(您声明您已经完成了该类),然后调用

String str = context.getResources().getString(R.string.some_string);
Run Code Online (Sandbox Code Playgroud)

还要检查您的strings.xml文件以确保您正确使用字符串 id。如果您使用的是 android studio,您应该能够简单地开始输入R.string.,然后它会显示来自 strings.xml 文件的建议。如果您在此处没有看到您的资源,则可能表明您存储资源的方式存在问题,而不是您尝试访问它们的方式。