2017-04-06 40 views
0

所以我尝试了各种解决方案来解决这个问题。这里是我开始的一个例子:需要将字符串资源转换为viewpager中的字符串

class SimpleFragmentPagerAdapter extends FragmentPagerAdapter { 

SimpleFragmentPagerAdapter(FragmentManager fm) { 
    super(fm); 
} 

private String tabTitles[] = new String[] {"one","two","three","four"}; 

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

然后我尝试以下,以获得从string.xml相同字符串:

class SimpleFragmentPagerAdapter extends FragmentPagerAdapter { 

SimpleFragmentPagerAdapter(FragmentManager fm) { 
    super(fm); 
} 

private String tabTitles[] = new String[] {Resources.getSystem().getString(R.string.one), 
    Resources.getSystem().getString(R.string.two), 
    Resources.getSystem().getString(R.string.three), 
    Resources.getSystem().getString(R.string.four)}; 

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

但我收到此错误: 致命异常:主要 进程:com.example.android.myapp,PID:9923 java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.android.myapp/com.example.android.myapp.MainActivity}:android.content .res.Resources $ NotFoundException:String res乌尔斯河ID#0x7f070017

因为我知道琴弦存在,我在我的代码,我认为这可能需要上下文其他地区使用过,所以我通过适配器通过MainActivity.this和尝试:

class SimpleFragmentPagerAdapter extends FragmentPagerAdapter { 

private Context mContext; 

SimpleFragmentPagerAdapter(FragmentManager fm, Context context) { 
    super(fm); 
    this.mContext = context; 
} 

private String tabTitles[] = new String[] {mContext.getResources().getString(R.string.one), 
    mContext.getResources().getString(R.string.two), 
    mContext.getResources().getString(R.string.three), 
    mContext.getResources().getString(R.string.four)}; 

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

而接收此错误: 致命异常:主 工艺:com.example.android.myapp,PID:5387 了java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.android.myapp /com.example.android.myapp.MainActivity}:java.lang.NullPointerException:尝试t ø调用虚拟方法android.content.res.Resources android.content.Context.getResources()'上的空对象引用

最后,我试图的资源转换为字符串在MainActivity内,并通过将它们传递到适配器:

class SimpleFragmentPagerAdapter extends FragmentPagerAdapter { 

private String mOne; 
private String mTwo; 
private String mThree; 
private String mFour; 

SimpleFragmentPagerAdapter(FragmentManager fm, one, two, three, four) { 
    super(fm); 
    mOne = one; 
    mTwo = two; 
    mThree = three; 
    mFour = four; 
} 

private String tabTitles[] = new String[] {mOne,mTwo,mThree,mFour};  

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

它运行没有错误,但只是导致空白标签标题。

也许我只是在这里做一个完整的菜鸟,想念一些简单的东西,但我会很感激你们可以提供的任何帮助。

+0

你可以显示你在哪里实例化你的适配器并将其设置为你的Tablayout – buradd

+0

我的回答对你有帮助吗?如果是,请将其标记为已接受的答案。 – MatusMak

回答

1

看这些代码行:

private String tabTitles[] = new String[] {mOne,mTwo,mThree,mFour}; 
private String tabTitles[] = new String[] { 
    mContext.getResources().getString(R.string.one), 
    mContext.getResources().getString(R.string.two), 
    mContext.getResources().getString(R.string.three), 
    mContext.getResources().getString(R.string.four) 
}; 

的问题是,这些阵列被初始化与MONE,mTwo,mThree和mFour的空(实际上,空)值。只有在那之后,你才在你的构造函数中赋值它们。但是这不会更新你的数组。请看下面的例子:

class SimpleFragmentPagerAdapter extends FragmentPagerAdapter { 

    private Context mContext; 
    private String tabTitles[]; 

    SimpleFragmentPagerAdapter(FragmentManager fm, Context context) { 
     super(fm); 
     this.mContext = context; 
     tabTitles = new String[]{ 
      mContext.getResources().getString(R.string.one), 
      mContext.getResources().getString(R.string.two), 
      mContext.getResources().getString(R.string.three), 
      mContext.getResources().getString(R.string.four) 
     }; 
    } 

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

我在这里所做的是在说:“嘿Java中,有一个名为tabTitles一个String数组,未初始化(它具有空值)。”然后,在构造函数中,“嘿Java,将这些值分配给名为tabTitles的数组”。现在,当getPageTitle(int position)被调用时,

+0

太棒了,谢谢。猜猜我过于复杂了。 –