2011-07-27 11 views
1

私は2つのアクティビティを持っています。アクティビティ1とアクティビティ2を考えてみましょう。私はTabHostの下に2つの別々のタブにこれらの2を追加しました。Android Eclipse、2つの異なるタブでの2つのアクティビティは、onCreate()を呼び出し続けます!

コンテンツを表示するために必要なタブを押すたびに、各アクティビティの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); 
    } 

} 

答えて

1

できるだけ少数の活動が一点にロードされているように、メモリを維持するために。タブが表示されていないときにアクティビティが表示されないため、アクティビティは破棄されます。

各タブのアクティビティを作成するのではなく、同じアクティビティの各タブごとに異なるビューを作成するか、アクティビティの状態を再度ロードするときに保存する必要があります。

ここで活動せずにtabhostを作成する方法についての小さな例があります:http://dewful.com/?p=15

+0

アクティビティは表示されていないときに一時停止され、アプリケーション全体がバックグラウンドに置かれた場合にのみ破棄されます。インテントを使用してタブホストを実装しても問題はありません。 – PravinCG

4

は、あなたがあなたのtabhostに活動を使用している方法についてのいくつかのコードを表示することができます。理想的には、タブが作成されると、アクティビティはonResumeを呼び出し、onCreateは呼び出さず、あるタブから別のタブに移動するときにアクティビティが破棄されないようにします。

+0

コードは – mat

+0

です。サンプルコードが追加されました。 – mat

+2

このコードは、両方のTabSpecで同じタグtid1を使用していることを除いてokieと思われます。 – PravinCG

0

私の問題は、PravinCGが上で説明したものと同じでした。 すべてのTabSpecのタグが一意であることを確認して、問題を簡単に解決してください!

1

これを置き換えます。 TabSpec firstTabSpec = tabHost.newTabSpec( "tid1");
TabSpec secondTabSpec = tabHost.newTabSpec( "tid1"); with:

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

関連する問題