27/05/2016, 04:16
|
| | Fecha de Ingreso: mayo-2014
Mensajes: 45
Antigüedad: 10 años, 6 meses Puntos: 0 | |
Respuesta: Problema con AsyncTask, processFinish y el hilo principal. Estoy cargando los fragments dentro de un TabAdapter, en la actividad (ArteCulturaGeneral extends AppCompatActivity) tengo:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.arte_cultura_general);
Toolbar toolbar = (Toolbar) findViewById(R.id.appbarguiameartegenral);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(f alse);
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpagerartegenral);
viewPager.setAdapter(new PagerAdapterArqueologia(
getSupportFragmentManager()));
getSupportActionBar().setDisplayShowTitleEnabled(f alse);
TabLayout tabLayout = (TabLayout) findViewById(R.id.appbartabsartegenral);
tabLayout.setTabMode(TabLayout.MODE_FIXED);
tabLayout.setupWithViewPager(viewPager);
Y la clase ArteGeneralDetails extends AsyncTask. Para obtener los valores de la consulta a la base de datos en la actividad implemento una interfaz de la siguiente manera:
1 Creo la clase:
public interface AsyncResponse {
void processFinish(String output);
}
2 En la actividad:
public class ArteCulturaGeneral extends AppCompatActivity implements AsyncResponse{
ArteGeneralDetails asyncTask = new ArteGeneralDetails();
…
protected void onCreate(Bundle savedInstanceState) {
asyncTask.delegate = this;
…
asyncTask.execute();
y en la clase AsyncTask:
class ArteGeneralDetails extends AsyncTask<String, String, String> {
public AsyncResponse delegate = null;
…
protected void onPostExecute(String nombre) {
pDialog.dismiss();
delegate.processFinish(nombre);
}
La variable (nombre) la recojo con el método:
public void processFinish(String outnombre){
nombreArte=outnombre;
Toast.makeText(this, nombreArte, Toast.LENGTH_LONG).show();
} //El Toast funciona perfectamente
Ahora viene mi drama. Tenía la intención de pasar nombreArte al fragment con:
public String getMyNombre() {
return nombreArte;
}
Y en el fragment:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.arte_general_arqueolog, container, false);
ArteCulturaGeneral activityId = (ArteCulturaGeneral) getActivity();
String nombreArte2 = activityId.getMyNombre();
((TextView) rootView.findViewById(R.id.nombreArteGeneral)).set Text(nombreArte2);
return rootView;
}
Lo cual no puede ser, aquí es donde no me he explicado bien con “no entiendo a que te refieres con que llega tarde”, lo que debería haber dicho es: estoy llamando al get antes de que la tarea haya acabado, y entonces el valor que espero todavía no está en la variable porque no se ha llamado todavía al processFinish. Luego por ahí no voy a ninguna parte y lo que me gustaría saber en como puedo pasar la variable del processFinish al fragment.
Gracias otra vez por tu ayuda.
Última edición por jlopezisern; 27/05/2016 a las 05:47 |