![]() |
|
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
«
Tema Anterior
|
Siguiente tema
»
|
Herramientas |
#1
|
||||
|
||||
Pasar valores a dos fragments cuando cambio de tab.
Tengo una actividad principal con dos fragments, uno muestra la información general y el otro el mapa.
Los valores de la base de datos los recojo en el método de la actividad principal: public void processFinish(String outlatitud,String outlongitud,String outnombre, String outimg,…){ if(viewPager.getCurrentItem() == 0) { Arqueolog fragmentArte= (Arqueolog)viewPager.getAdapter().instantiateItem( viewPager, viewPager.getCurrentItem()); fragmentArte.recogerDatos(outnombre, outimg,…); }else if(viewPager.getCurrentItem() == 1){ Mapa fragmentArteMapa = (Mapa)viewPager.getAdapter().instantiateItem(viewP ager, viewPager.getCurrentItem()); fragmentArteMapa.recogerDatos(outlatitud,outlongit ud,outnombre); } } Y la paso a los fragments con una instancia de estos y el método recogenDatos que en los fragmens queda así: Fragment Arqueolog: public void recogerDatos(final String nombre, final String imagen,…){ TextView txtArteGeneral = (TextView) getActivity().findViewById(R.id.nombreArteGeneral) ; txtArteGeneral.setText(nombre); … } Fragment Mapa: public void recogerDatos(final String outlatitud, final String outlongitud,final String outnombre){ TextView latPosicion= (TextView)getActivity().findViewById(R.id.textMapa Lat); latPosicion.setText(outlatitud); TextView lngPosicion= (TextView) getActivity().findViewById(R.id.textMapaLong); lngPosicion.setText(outlongitud); TextView nombrePosicion= (TextView) getActivity().findViewById(R.id.textMapaArte); nombrePosicion.setText(outnombre); } El problema que tengo es que cuando entro en la actividad al ser getCurrentItem() ==0 me pasa los valores al primer fragment correctamente, pero cuando cambio de tab a getCurrentItem() ==1 no me pasa los valores al fragment del mapa. Mi pregunta es cómo puedo hacer para que cuando cambio de tab me pase esos valores. Gracias de antemano a quien me pueda orientar a una solución. |
|
#2
|
||||
|
||||
Normal, si el processFinish se ejecuta una vez solo (cuando acaba la AsyncTask que tenías), le pasará los datos a quien hayas indicado en ese momento. Si realizas otras acciones tendrás que llamar explícitamente otra vez al recogerDatos al cambiar de fragment.
Por recapitular, el problema de tu otra consulta era que no tenías los datos porque la AsyncTask no había acabado y el fragment al consultar el nombre u otros parámetros recibía null. Por eso creamos el método recogerDatos para que al terminar la tarea, que es cuando ya se tienen los datos, enviárselos. Aquí los datos ya los tienes, en el momento que vayas a cambiar de fragment le pasas los datos llamando al recogerDatos del fragment que toque y ya está. |
#3
|
||||
|
||||
Pasar valores a dos fragments cuando cambio de tab.
He añadido un listener para saber cuándo cambia de tab:
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @override public void onPageSelected(int position) { Toast.makeText(getApplicationContext(),Integer.toS tring(position),Toast.LENGTH_SHORT).show(); item = position; } @override public void onPageScrollStateChanged(int state) { } }); El Toast devuelve 0 , 1 dependiendo de la posición del tab. El problema ahora es pasar el valor de int item a processFinish y que según sea 0 o 1 pase los valores a las instancias de fragment correspondientes, vamos que sigo igual. |
#4
|
||||
|
||||
Si al que tienes que llamar es al recogerDatos del fragment que corresponda. El processFinish es para que la AsyncTask notifique los resultados de la tarea, si lo usas para más cosas luego no sabes para qué vale cada método.
Según dices, ya sabes a qué fragment ha cambiado. Solo tienes que llamar a su recogerDatos con los datos que sean (que ya los tienes de antes) |
Gracias de parte de: | ||
#5
|
||||
|
||||
Solucionado: Pasar valores a dos fragments con viewpager cuando cambio de tab.
Mirando que el problema venia de que processFinish se ejecutaba solo una vez desde el Asyntask y solo cogía una posición de tab lo he dejado así:
Arqueolog fragmentArte= (Arqueolog)viewPager.getAdapter().instantiateItem( viewPager, viewPager.getCurrentItem()); Y Mapa fragmentArteMapa = (Mapa)viewPager.getAdapter().instantiateItem(viewP ager, viewPager.getCurrentItem()); Y me daba error ya que ambas instancias obtienen la misma posición: (viewPager.getCurrentItem()) , pero asignándole a cada instancia la posicion que le corresponde: Arqueolog fragmentArte= (Arqueolog)viewPager.getAdapter().instantiateItem( viewPager, 0); Y Mapa fragmentArteMapa = (Mapa)viewPager.getAdapter().instantiateItem(viewP ager, 1); Funciona perfectamente. Muchas gracias por tu ayuda. |
Respuesta |
![]() |
||||||
|
«
Tema Anterior
|
Siguiente tema
»
|
|
Hora actual: 00:14:13 (GMT +2)
HTCMania: líderes desde el 2007