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

Respuesta
 
Herramientas
  #1  
Viejo 12/06/16, 18:41:19
Array

[xs_avatar]
Joakin60 Joakin60 no está en línea
Miembro del foro
 
Fecha de registro: oct 2015
Mensajes: 64
Tu operador: Movistar

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.
Responder Con Cita


  #2  
Viejo 13/06/16, 09:33:43
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

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á.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
  #3  
Viejo 14/06/16, 11:24:54
Array

[xs_avatar]
Joakin60 Joakin60 no está en línea
Miembro del foro
 
Fecha de registro: oct 2015
Mensajes: 64
Tu operador: Movistar

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.
Responder Con Cita
  #4  
Viejo 14/06/16, 12:03:10
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

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)
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
Gracias de parte de:
  #5  
Viejo 15/06/16, 16:08:13
Array

[xs_avatar]
Joakin60 Joakin60 no está en línea
Miembro del foro
 
Fecha de registro: oct 2015
Mensajes: 64
Tu operador: Movistar

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.
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 00:11:45 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /