2017-04-06 39 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

太棒了,謝謝。猜猜我過於複雜了。 –