所以我尝试了各种解决方案来解决这个问题。这是我开始的地方的一个例子:
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 resource 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:尝试调用虚方法' 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 :(得分:2)
看看这些代码行:
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];
}
}
我在这里所做的是说“Hey Java,有一个名为tabTitles的String数组,它没有被初始化(它有空值)。”然后,在构造函数中,“嘿Java,将这些值分配给名为tabTitles的数组”。现在,当调用getPageTitle(int position)时,