Android Eclipse,两个不同选项卡中的两个活动,一直调用onCreate()!

时间:2011-07-27 12:45:35

标签: android eclipse android-activity android-tabhost

我有2个活动,比如说Activity1和Activity2。我已将这2个添加到TabHost下的2个单独的标签中。

每次按下必需的选项卡查看内容时,都会调用每个活动的onCreate(),因此会重新启动活动!这是为什么?我怎样才能防止这种情况发生?

感谢。

TabHostActivity类的代码:

package zt.ztactive;

import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;

 public class TabHostActivity extends TabActivity { 

     TabHost tabHost;

     /** Called when the activity is first created. */

     @Override 
     public void onCreate(Bundle savedInstanceState) {  
         super.onCreate(savedInstanceState);  
         setContentView(R.layout.tabwindow);  

         /** TabHost will have Tabs */ 
         tabHost = (TabHost)findViewById(android.R.id.tabhost); 

         /** TabSpec used to create a new tab.  
          * By using TabSpec only we can able to setContent to the tab.  
          * By using TabSpec setIndicator() we can set name to tab. */

         /** tid1 is firstTabSpec Id. Its used to access outside. */ 
         TabSpec firstTabSpec = tabHost.newTabSpec("tid1");  
         TabSpec secondTabSpec = tabHost.newTabSpec("tid1"); 

         /** TabSpec setIndicator() is used to set name for the tab. */ 
         /** TabSpec setContent() is used to set content for a particular tab. */ 
         firstTabSpec.setIndicator("First Tab Name").setContent(new Intent(this,Activity1.class));  
         secondTabSpec.setIndicator("Second Tab Name").setContent(new Intent(this,Activity2.class)); 

         /** Add tabSpec to the TabHost to display. */ 
         tabHost.addTab(firstTabSpec);  
         tabHost.addTab(secondTabSpec);  
     }

 }

4 个答案:

答案 0 :(得分:4)

您是否可以在tabhost中显示有关如何使用“活动”的代码。理想情况下,一旦创建了选项卡,活动将调用onResume而不是onCreate,因为当您从一个选项卡移动到另一个选项卡时,活动不会被销毁。

答案 1 :(得分:1)

保留内存,尽可能少地加载活动。由于在未显示选项卡时活动不可见,因此活动将被销毁。

您不应该为每个标签创建活动,而是为同一活动中的每个标签设置不同的视图,或者您应该保存活动的状态以便再次加载它。

有一个关于如何在没有活动的情况下制作tabhost的小例子:http://dewful.com/?p=15

答案 2 :(得分:1)

替换它  TabSpec firstTabSpec = tabHost.newTabSpec(“tid1”);
 TabSpec secondTabSpec = tabHost.newTabSpec(“tid1”); 用:

TabSpec firstTabSpec = tabHost.newTabSpec(“tid1”);
 TabSpec secondTabSpec = tabHost.newTabSpec(“tid2”);

答案 3 :(得分:0)

对我来说,问题与PravinCG上面描述的相同。 确保所有TabSpecs中的标签都是唯一的,很容易解决问题!