Android ViewPager findViewById no funciona – siempre devuelve null

public class HSPTabletTestActivity extends Activity { private class MyPagerAdapter extends PagerAdapter { public int getCount() { return 2; } public Object instantiateItem(View collection, int position) { LayoutInflater inflater = (LayoutInflater) collection.getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); int resId = 0; switch (position) { case 0: resId = R.layout.lighttab; break; case 1: resId = R.layout.securitytab; break; } View view = inflater.inflate(resId, null); ((ViewPager) collection).addView(view, 0); return view; } @Override public void destroyItem(View arg0, int arg1, Object arg2) { ((ViewPager) arg0).removeView((View) arg2); } @Override public void finishUpdate(View arg0) { // TODO Auto-generated method stub } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == ((View) arg1); } @Override public void restoreState(Parcelable arg0, ClassLoader arg1) { // TODO Auto-generated method stub } @Override public Parcelable saveState() { // TODO Auto-generated method stub return null; } @Override public void startUpdate(View arg0) { // TODO Auto-generated method stub } } 

Tengo este código allí arriba ^^ … Bastante tomado directamente de http://mobile.tutsplus.com/tutorials/android/android-user-interface-design-horizontal-view-paging/ … Estoy Todavía bastante nuevo en el mundo del desarrollo android: /

Ahora estoy tratando de acceder a un control giratorio y algunos botones dentro de las "páginas". Pero findViewById sigue regresando null!

Recuerdo que algo sobre el diseño no existe realmente dentro del código y tiene que ser inflado primero, lo que está sucediendo en la función instantiateItem (). Y es bastante obvio que está entrando en la variable de "vista". Pero cuando llamo view.findViewById (R.id.light1_off);

Que es un botón por cierto, siempre está volviendo cero! Incluso me aseguré de que sólo se llama cuando en realidad era la página que se está cargando. Pero no importa lo que hice, siempre sigue regresando un nulo y me sale una desagradable excepción nullpointer.

¿Podría alguien ayudarme aquí? Estoy bastante fuera de las ideas, y Google no es de ninguna ayuda, ya ha estado en la página 5 sobre unos 10 términos de búsqueda diferentes.

Después de mucha frustración y tirando de mi pelo sobre este tema, lo he resuelto! Al menos para mi. Asumiendo que usó el tutorial de tutsplus como lo hice, tiene archivos XML separados para sus pantallas. Ahora, supongo que los XML de diseño contienen diseños dentro de ellos (es decir, LinearLayout, RelativeLayout, etc.). Ahora, esos diseños contienen su botón y otros widgets. Lo que usted tiene que hacer para poder findViewById es, en la instrucción switch actual en el método instatiateItem, inicializar su botón de esta manera:

 public Object instantiateItem(View collection, int position) { LayoutInflater inflater = (LayoutInflater) collection.getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); int resId = 0; switch (position) { case 0: resId = R.layout.lighttab; View view = inflater.inflate(resId, null); RelativeLayout layout=(RelativeLayout)view.findViewById(R.id.relLayout); Button button=(Button)layout.findViewById(R.id.button); ((ViewPager) collection).addView(view, 0); return view; case 1: resId = R.layout.securitytab; ... ... return view; } } 

Así que … primero tienes que inflar la vista, luego inicializar el diseño mantenido dentro de la vista, emitiendo el tipo de diseño (RelativeLayout) y llamando .findViewById (id de recurso). Luego, inicializa el widget real que estás buscando haciendo lo mismo, pero lanzando el tipo de widget (Button) y llamando .findViewById (id de recurso).

Esto funcionó para mí, así que espero que esto le ahorra algunos problemas! Tomó una eternidad para mí para averiguar.

Apenas adivine como usted no demuestra el xml para inflado. ¿Utilizas + @ id. Si no intentarlo.

Usted puede evitar todo este trabajo sucio sólo agregando setContentView (R.layout.youlayout) antes de findViewById

  • Android- cómo programar una vista entre las vistas en el diseño pre-cargado desde el XML?
  • ¿Cómo agregar la barra de acción en la plataforma android 2.3?
  • ¿Cómo manejar clics / toques en componentes personalizados repetidos?
  • Agregar vista a disposición relativa detrás de una vista existente provoca parpadeo de la pantalla
  • ¿Cuántas tiendas de aplicaciones de Android para enviar ...?
  • Android: Compartir hermano Vistas estado presionado
  • Crear barra de título personalizada en Android
  • Android Textview ellipsize con varias filas
  • Cómo agregar automáticamente miles de separadores como número se ingresa en EditText
  • Autocompletetextview como una pista
  • Cómo configurar el ancho en Android con javascript?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.