2013-09-02 13 views
5

私のビューページのタイトルを設定しようとしていますが、動作させることができません。私はResources.getSystem()を試した。getString(R.string.title1);また、文脈を渡そうとしました。誰か助けてくれますか?ViewPagerアダプタ内の文字列リソースを取得するには?

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; 
    } 
} 

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) 

答えて

9

さて、あなたのエラーメッセージに応じて、あなたが要求しているIDと文字列を持っていません。

は、それはあなたが マルチ言語をサポートするだけで、特定の言語の文字列-IDのこの 種類を持っていることだろうか?

とにかく、このコード行:

String yourstring = getResources().getString(R.string.yourstring); 

はリソースから文字列を取得する方法です。

0

Resourcesの中にStringを取得しようとしていますが、を取得していません。そのため、Resourcesをに置き換えてContextとしてください。

あなたがActivityまたはServiceの中にいる場合、文脈はそこにあります。外にある場合はgetApplicationContext()Contextを最初に引っ張ってください。その上でリソースを引き出し、最後にStringを引っ張ってください。

コードごとに、resourcesというID番号が記載されていて、ID番号がStringである場合は、これらのスニペットは例外をスローしません。

public CharSequence getPageTitle(int position) 
    { 
    switch (position) 
    { 
    case 0: 
      return getResources().getString(R.string.title1); 
    case 1: 
      return getResources().getString(R.string.title1); 
    case 2: 
      return getResources().getString(R.string.title1); 
    } 
    return null; 
    } 
28

あなたは、アクティビティのコンテキストからの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; 
    } 
} 
0

getApplicationContextを試してみてください()getResources ().getString(R.String.title1)にコードを変更する必要があります。

0

私の経験では、ビューページャは割り当てられた画面に各テキストを一貫して表示しません。私は各ページごとに別々のレイアウトを作成し、レイアウト内からテキストを割り当てる必要があったので、ページをめくるときに、各ページにそのテキストのレイアウトが表示されます。

3

あなたが活動の外部から文字列リソースにアクセスしようとしている場合、あなたは(あなたがすでに行っている述べた)、そのクラスにコンテキストを渡し、その後、また

String str = context.getResources().getString(R.string.some_string); 

を呼び出す必要がありますstrings.xmlファイルをチェックして、文字列IDを正しく使用していることを確認してください。 アンドロイドスタジオを使用している場合は、単にR.string.と入力するだけで、strings.xmlファイルから候補が表示されます。ここにあなたのリソースが表示されない場合は、リソースへのアクセス方法とは対照的に、リソースの格納方法に問題がある可能性があります。

0

getContext()と同様に、getContext()。getString(resId)を使用して使用可能なものを使用してください。string.title1)。 それは私のために働いた。

関連する問題