Barra de pestañas con tarea asíncrona en Android

Creé una aplicación que comienza a copiar imágenes y algunos datos de la aplicación a la memoria interna una vez que las aplicaciones se ejecutan por primera vez. Luego use estos datos más tarde en otro lugar en otra actividad.

El proceso de copia tarda más de 30 segundos. así que quería hacer esto en una tarea asíncrona. Pero no pude hacerlo funcionar. La tarea asíncrona funciona bien, pero necesito crear especificaciones de pestañas y asignar intenciones a cada una de las especificaciones en el método onPostExecute. Pero todo lo que veo es una barra de pestañas sin especificaciones y nada funciona.

Entonces, ¿alguna idea de cómo construirlo de esta manera?

Cualquier ayuda será apreciada. Aquí está mi actividad,

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tabbar_main);

    myJSON = new DataBaseJSONFunctions(this);

    TabHost tabHost = getTabHost();

    TabWidget tabWidget = tabHost.getTabWidget();

    Resources res = getResources();
    //TabHost tabHost = getTabHost();

    TabHost.TabSpec spec;
    Intent intent;

    // Starting Initialization process.
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

    if(!prefs.getBoolean("firstRun", false)) {

        initializeAll();
        // Set "firstRun" true to make it runs once application is installed.
        prefs.edit().putBoolean("firstRun", true).commit();
    }

Y quiero poner este bloque en una tarea asíncrona,

    intent = new Intent().setClass(this,Activities.class);
    spec = tabHost.newTabSpec("activities").setIndicator("act",res.getDrawable(R.drawable.tab_activities_selector)).setContent(intent);
    tabHost.addTab(spec);

    // doing the same things.
    intent = new Intent().setClass(this, Promotions.class);
    spec = tabHost.newTabSpec("promotion").setIndicator("Promotion",res.getDrawable(R.drawable.tab_promotions_selector)).setContent(intent);
    tabHost.addTab(spec);


    // doing the same things for Albums Activity.
    intent = new Intent().setClass(this,Menu.class);
    spec = tabHost.newTabSpec("menu").setIndicator("Menü",res.getDrawable(R.drawable.tab_menu_selector)).setContent(intent);
    tabHost.addTab(spec);

    for(int i = 0; i < tabWidget.getChildCount(); i++){
        tabWidget.getChildAt(i).setBackgroundResource(R.drawable.tab_bar);
    }

    tabHost.setCurrentTab(0);

por cierto, estoy pasando el contexto de mi actividad a la tarea asíncrona.

preguntado el 03 de mayo de 12 a las 16:05

1 Respuestas

tratando de poblar TabHost del AsyncTask es un poco poco convencional. Yo sugeriría poblar TabHost con pestañas tan pronto como se inicia su aplicación, luego ejecuta AsyncTask, que puede o no mostrar ProgressDialog para que el usuario sepa que algo está pasando, y después de su AsyncTask ha terminado, puede llenar su interfaz de usuario con los nuevos datos.

contestado el 03 de mayo de 12 a las 20:05

Lo intentaré lo antes posible, pero la cuestión es que si relleno la barra de pestañas tan pronto como se inicie la aplicación, ¿cómo lo haría? Quiero decir que necesito los datos devueltos por AsyncTask para llenar la interfaz de usuario. Si inicio la intención sin datos, obtendré un puntero nulo. - Osayilgan

puede usar los datos guardados de la ejecución anterior o los datos de marcador de posición creados manualmente si esta es su primera ejecución. El punto es que su interfaz de usuario debería mostrar algo, y luego puede comenzar la actualización en segundo plano y, probablemente, mostrar ProgressBar para decirle al usuario que algo está pasando. - lenik

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.