Home Menu

Menu



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


 
Herramientas
  #1  
Viejo 12/06/16, 18:41:19
Avatar de Joakin60
Joakin60 Joakin60 no está en línea
Miembro del foro
Mensajes: 64
 
Fecha de registro: oct 2015
Mensajes: 64
Tu operador: Movistar
Mencionado: 3 comentarios
Tagged: 0 hilos
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
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
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á.
Responder Con Cita
  #3  
Viejo 14/06/16, 11:24:54
Avatar de Joakin60
Joakin60 Joakin60 no está en línea
Miembro del foro
Mensajes: 64
 
Fecha de registro: oct 2015
Mensajes: 64
Tu operador: Movistar
Mencionado: 3 comentarios
Tagged: 0 hilos
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
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
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)
Responder Con Cita
Gracias de parte de:
  #5  
Viejo 15/06/16, 16:08:13
Avatar de Joakin60
Joakin60 Joakin60 no está en línea
Miembro del foro
Mensajes: 64
 
Fecha de registro: oct 2015
Mensajes: 64
Tu operador: Movistar
Mencionado: 3 comentarios
Tagged: 0 hilos
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   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 00:14:13 (GMT +2)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007