带有Async Task的Tabbar在Android中

时间:2012-05-03 15:58:04

标签: android tabs android-asynctask android-tabhost

我已经构建了一个应用程序,一旦应用程序第一次运行,它就开始将图像和一些数据从应用程序复制到内部存储器。然后在其他活动的其他地方使用这些数据。

复制过程需要30秒以上。所以我想在异步任务中这样做。但我无法让它发挥作用。异步任务运行良好但我需要创建选项卡规范并为onPostExecute方法的每个规范分配意图。但我所看到的只是没有规格的标签栏,没有任何作用。

所以任何想法如何以这种方式构建它?

任何帮助将不胜感激。  我的活动在这里,

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();
    }

我想把这个块放在异步任务中,

    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);
顺便说一句,我将我的活动的上下文传递给异步任务。

1 个答案:

答案 0 :(得分:0)

尝试从TabHost填充AsyncTask有点不同寻常。我建议您在应用程序启动后立即使用标签填充TabHost,然后运行AsyncTask,这可能会显示ProgressDialog,也可能不会显示AsyncTask让用户知道正在发生的事情,在{{1}}完成后,您可以使用新数据填充UI。