【问题标题】:Android Eclipse, two activities in two different tabs, keeps calling onCreate()!Android Eclipse,两个不同选项卡中的两个活动,不断调用 onCreate()!
【发布时间】:2011-07-27 12:45:34
【问题描述】:

我有 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);  
     }

 }

【问题讨论】:

    标签: android eclipse android-activity android-tabhost


    【解决方案1】:

    您能否展示一些代码来说明您如何在 tabhost 中使用活动。理想情况下,一旦创建了选项卡,活动将调用 onResume 而不是 onCreate,因为当您从一个选项卡移动到另一个选项卡时,活动不会被破坏。

    【讨论】:

    • 代码看起来没问题,除了你对两个 TabSpec 使用相同的标签 tid1 你能改变吗?
    • 将第二个标签 tid1 更改为 tid2 并像魅力一样工作!谢谢!
    • 太棒了!您可以根据此处的规则接受此作为答案,以便当您有更多问题时人们会帮助您。
    • mat 有同样的问题,非常感谢。 PravinCG 给@mat 一些信任并接受答案。
    【解决方案2】:

    为了节省内存,在某一时刻加载尽可能少的活动。当未显示选项卡时不可见时,活动被销毁。

    您不应该为每个选项卡创建一个活动,而是应该为同一活动中的每个选项卡创建不同的视图,或者您应该保存活动的状态以供再次加载时使用。

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

    【讨论】:

    • Activity 在不可见时暂停,只有在整个应用程序置于后台时才销毁。如果选项卡主机是使用意图实现的,它应该不会导致任何问题。
    【解决方案3】:

    替换这个 TabSpec firstTabSpec = tabHost.newTabSpec("tid1");
    TabSpec secondTabSpec = tabHost.newTabSpec("tid1"); 与:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2016-02-28
        • 2020-12-11
        • 1970-01-01
        • 1970-01-01
        • 2016-12-02
        • 2012-03-09
        • 1970-01-01
        • 1970-01-01
        • 2020-08-22
        相关资源
        最近更新 更多