¿Cómo obtener un recurso de cadena en el adaptador ViewPager?

Estoy intentando fijar el título para mi viewpager, no puedo parecer conseguirlo para trabajar. Traté de Resources.getSystem (). GetString (R.string.title1); Y también trató de pasar un contexto. ¿Podría alguien ayudarme?

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) 

Bueno, de acuerdo con su mensaje de error no tiene una cadena con el ID que está solicitando.

¿Podría ser que usted está apoyando multi idiomas y sólo tiene este tipo de String-ID para un idioma específico?

De todos modos, esta línea de código:

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

Es cómo obtener una cadena de recursos.

Debe llamar a getString desde el contexto de una actividad, cambiar su código a

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

Si está intentando acceder a los recursos de cadena desde fuera de una actividad, debe pasar el contexto a esa clase (que ya ha declarado que ya ha hecho) y, a continuación,

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

También compruebe su archivo strings.xml para asegurarse de que está utilizando correctamente el ID de cadena. Si estás usando android studio deberías ser capaz de simplemente empezar a escribir R.string. Y luego mostrará las sugerencias del archivo strings.xml. Si no ve su recurso aquí, puede indicar un problema con la forma en que está almacenando sus recursos, en contraposición a cómo está intentando acceder a ellos.

Estás intentando buscar String dentro de tus Resources sin obtener Resources . Así que trate de extraer sus Resources con getResources() con su Context .

Si estás dentro de Activity o Service entonces el contexto está ahí. Si fuera, entonces intenta tirar Context primero con getApplicationContext() y en ese tirar de los recursos y tirar de su String al final en ella.

Según su código, este fragmento no lanzaría ninguna excepción si los resources y los id de String mencionados se extraen correctamente.

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

Pruebe getApplicationContext (). GetResources () .getString (R.String.title1);

En mi experiencia, el paginador de vista no mostrará cada texto a la pantalla asignada consistentemente. Necesitaba crear un diseño independiente para cada página y asignar el texto desde dentro del diseño, por lo que al voltear las páginas de cada página se mostrará un diseño con su texto.

Sólo tienes que usar el método getContext (). GetString (resId) como getContext (). GetString (R.string.title1). Funcionó para mí.

  • Adición y eliminación de fragmentos de forma dinámica en ViewPager
  • Android-Cómo animar viewPager
  • Cómo volver a crear todos los fragmentos en ViewPager:
  • ViewPager funciona bien en la primera vez, pero en la recarga de nuevo, recibiendo el error java.lang.IllegalStateException?
  • Guardar estado de fragmento en ViewPager
  • Cómo personalizar PagerTabStrip con stripDrawable y el espaciado
  • Comunicación de Android entre la actividad y el fragmento
  • Android CoordinatorLayout + AppbarLayout + Viewpager siempre desplazándose
  • Visualización de varias páginas en ViewPager, posición incorrecta
  • Problema de renderización de ViewPager personalizado en ciertos dispositivos:
  • "El niño especificado ya tiene un padre" error usando FragmentStatePagerAdapater
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.