Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 2.1中的TabHost和AsyncTasks_Android_Android Asynctask_Android Tabhost_Tabactivity - Fatal编程技术网

Android 2.1中的TabHost和AsyncTasks

Android 2.1中的TabHost和AsyncTasks,android,android-asynctask,android-tabhost,tabactivity,Android,Android Asynctask,Android Tabhost,Tabactivity,我的应用程序启动时有一个TabActivity,它有四个选项卡,每个选项卡都有一个关联的ListView活动作为其内容。理想情况下,我希望在onCreate中启动一个异步任务来初始化Drupal XMLRPC连接,完成后,我创建tabHost并在onPostExecute中添加选项卡。这在Android 2.2及更高版本中运行良好,但在2.2及更低版本中会立即导致强制关闭。据我所知,在Android 2.2更低版本中,TabActivity要求在完成任何其他操作(包括异步任务)之前创建选项卡?如

我的应用程序启动时有一个TabActivity,它有四个选项卡,每个选项卡都有一个关联的ListView活动作为其内容。理想情况下,我希望在onCreate中启动一个异步任务来初始化Drupal XMLRPC连接,完成后,我创建tabHost并在onPostExecute中添加选项卡。这在Android 2.2及更高版本中运行良好,但在2.2及更低版本中会立即导致强制关闭。据我所知,在Android 2.2更低版本中,TabActivity要求在完成任何其他操作(包括异步任务)之前创建选项卡?如果有人对如何在setCurrentTab中启动活动之前实现运行AsyncTask的TabActivity有任何建议,我将不胜感激。这是我正在使用的onCreate,用于初始化tabHost以供参考:

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
    tabHost = getTabHost(); //The activity TabHost
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_bar);
    TabHost.TabSpec spec; //Reusable TabSpec for each tab
    Intent intent; //Reusable Intent for each tab

    // Create an Intent to launch an Activity for the tab (to be reused)
    intent = new Intent().setClass(this, BlogList.class);
    // Initialize a TabSpec for each tab and add it to the TabHost
    spec = tabHost.newTabSpec("Blog Posts").setIndicator("Blog Posts")
                  .setContent(intent);
    tabHost.addTab(spec);

    // Do the same for the other tabs
    intent = new Intent().setClass(this, DiariesList.class);
    spec = tabHost.newTabSpec("Diaries").setIndicator("Diaries")
                  .setContent(intent);
    tabHost.addTab(spec);

    intent = new Intent().setClass(this, BoardList.class);
    spec = tabHost.newTabSpec("MGoBoard").setIndicator("MGoBoard")
                  .setContent(intent);
    tabHost.addTab(spec);

    intent = new Intent().setClass(this, UserActivityList.class);
    spec = tabHost.newTabSpec("My Account").setIndicator("My Account")
                  .setContent(intent);
    tabHost.addTab(spec);

    tabHost.getTabWidget().getChildAt(0).getLayoutParams().height = 50;
    tabHost.getTabWidget().getChildAt(1).getLayoutParams().height = 50;
    tabHost.getTabWidget().getChildAt(2).getLayoutParams().height = 50;
    tabHost.getTabWidget().getChildAt(3).getLayoutParams().height = 50;
    tabHost.setCurrentTab(0);
}   

使用TabHost时,2.1和2.2之间存在差异。对不起,我现在不能给出一个完整的答案,因为我没有时间。如果您没有得到答案,请在开始时用@MisterSquonk发表评论,我将查看我是如何解决此问题的。@MisterSquonk我还没有答案,希望知道您是如何解决的。我回顾了我遇到问题的代码。不确定这是否会有帮助,但最终我分两部分解决了它。首先,我创建了一个扩展应用程序的类,并将一些初始化代码放在其中。其次,我的AsyncTask是一个文件下载程序,我创建了一个单独的活动,带有“启动屏幕”的外观,并将其作为清单中的主要活动。当它完成它正在做的事情时,它会启动我的TabActivity并自动调用finish。@MisterSquonk闪屏解决方案就是我最后要做的。我唯一的问题是,如果用户在另一个活动中离开应用程序,然后从该活动中恢复应用程序。未到达初始屏幕,因此我需要的初始异步任务未运行。我正在讨论在onPause中调用finish,这样用户就会被迫返回初始屏幕。我唯一能想到的是修改用于选项卡内容的类,使它们不依赖于连接,而是创建自己的默认“未连接”视图。然后,他们可以启动AsyncTask建立连接,然后更新内容。