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!
- Android - SwipeRefreshLayout importación no encontrada
- Android quitar botón dinámicamente
- Android: agregar botones a un diseño de forma programática
- Dibujar un diseño cuadrado dentro de un círculo
- ActionbarSherlock: las pestañas no responden en la orientación horizontal
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.
- Barra de herramientas de la actividad de desplazamiento de Android Subtitle not showing
- ¿Cómo poner un EditText y un botón al lado del otro?
- cómo poner el botón al lado de actividad titile en android?
- ¿Por qué funcionan los parámetros de diseño en la programación de Android?
- Ayuda de diseño de Android, elementos que faltan
- Calcular el tamaño de la imagen cuando se utiliza setCompoundDrawables para EditText
- FragmentTabHost - No se conoce ninguna pestaña null
- Actividad de Android Línea de archivo XML binario: Debe proporcionar un atributo layout_width
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