2013-09-02 13 views
5

Próbuję ustawić tytuł mojego viewpagera, nie mogę go uruchomić. Próbowałem Resources.getSystem(). GetString (R.string.title1); a także próbował przekazać kontekst. Czy ktoś mógłby mi pomóc?Jak zdobyć zasób ciągu w adapterze 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) 

Odpowiedz

9

Cóż, według komunikatu o błędzie nie masz String z identyfikatorem którą wnioskujesz.

Czy to możliwe, że jesteś wspieranie językach wielo i mają tylko ten typu String-ID dla danego języka?

Tak czy inaczej, ta linia kodu:

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

jest jak uzyskać ciąg z zasobów.

0

Próbujesz pobrać String do swojego Resources bez uzyskiwania Resources. Więc spróbuj wyciągnąć swój Resources z getResources() ze swoim Context.

Jeśli jesteś w środku Activity lub Service, to jest kontekst. Jeśli jesteś na zewnątrz, spróbuj najpierw wyciągnąć Context z getApplicationContext(), a następnie pociągnij zasoby i wyciągnij na nim swój String.

Zgodnie z Kodeksem te fragmenty nie będą zgłaszać żadnych wyjątków, jeśli identyfikatory resources i wymienione String są poprawnie wyciągnięte.

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

należy zadzwonić getString z kontekstu działalności, należy zmienić swój kod do

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

Zajrzyj getApplicationContext() getResources () .getString (R.String.title1.);

0

Z mojego doświadczenia wynika, że ​​pager widoku nie będzie konsekwentnie pokazywał każdego tekstu na przypisanym ekranie. Musiałem stworzyć oddzielny układ dla każdej strony i przypisać tekst z układu, więc podczas przewracania stron każda strona wyświetli układ z tekstem.

3

Jeśli próbujesz uzyskać dostęp do zasobów ciągów spoza działalności, to trzeba przekazać kontekst, w tej klasie (co stwierdzono już zrobione), a następnie zadzwonić

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

także sprawdź swój plik strings.xml, aby upewnić się, że używasz poprawnie identyfikatora ciągu. Jeśli korzystasz z Android Studio, po prostu zacznij pisać R.string., a następnie pokaż sugestie z pliku strings.xml. Jeśli nie widzisz tu swojego zasobu, może to wskazywać na problem ze sposobem przechowywania zasobów, w przeciwieństwie do sposobu, w jaki próbujesz uzyskać do nich dostęp.

0

Wystarczy użyć dostępnego polecenia za pomocą getContext(). GetString (resId) jak getContext(). GetString (R.string.title1). To zadziałało dla mnie.

Powiązane problemy