2011-05-21 4 views
0

これは本当にシンプルなはずですが、うまくいきません。私が望むのは、同じアクティビティクラスを使用する2つの異なるタブです。彼らが同じ活動を共有しているのか、それぞれに独自の事例があるのか​​は気にしません。このコードでは、最初のタブと同じアクティビティを持つ2番目のタブを設定しますが、最初のタブのみがアプリケーションにロードされます。 2番目のタブをクリックすると、黒い画面が表示されます。Android 2つの同じタブのタブ

//Create tabs 
    Resources res = getResources(); 
    TabHost tabHost = getTabHost(); 
    TabHost.TabSpec spec; 
    Intent intent; 
    String tabTitle = getString(R.string.livevideo); 

    // Initialize intent 
    // Initialize tabspec for each tab and add it to host 
    intent = new Intent().setClass(this, CameraListView.class); 
    spec = tabHost.newTabSpec("live").setIndicator(tabTitle,res.getDrawable(R.drawable.livebtn)).setContent(intent); 
    tabHost.addTab(spec); 

    tabTitle = getString(R.string.videoplayback); 
    intent = new Intent().setClass(this, CameraListView.class); 
    spec = tabHost.newTabSpec("playback").setIndicator(tabTitle,res.getDrawable(R.drawable.playbackbtn)).setContent(intent); 
    tabHost.addTab(spec); 

これは単なる簡単なことではありませんか?私は、同じアクティビティで新しい意図を作ることは、アクティビティの2番目のコピーをインスタンス化すると思うだろうが、おそらくそれはAndroidの仕組みではない。コメントにあなたの質問に応えて

TabHost tabHost = getTabHost(); 
TabSpec spec = null; 

tabSpec = tabHost.newTabSpec("tabSpec"); 
tabSpec.setIndicator(someString, someDrawable); 
tabSpec.setContent(new Intent(getApplicationContext(), CameraListView.class)); 
tabHost.addTab(tabSpec); 

tabSpec = tabHost.newTabSpec("tabSpec"); 
tabSpec.setIndicator(someString, someDrawable); 
tabSpec.setContent(new Intent(getApplicationContext(), CameraListView.class)); 
tabHost.addTab(tabSpec); 

// EDIT

答えて

1

はこのような何かを試してみてください。私はあなたがしたいことをする方法について何も知らない。私はまったく同じ問題を抱えていました。最後に、firstTabActivityから継承した新しいアクティビティを作成して2番目のタブに入れて解決しました。あなたの場合、私はそれが非常に簡単だと思う - SecondTabActivityFirstTabActivityを拡張し、方法onListItemClick()を上書きします。

+0

ここで重要なのは、両方のタブに同じタブスペック名を使用することです。これは両方のタブで同じアクティビティを取得しますが、各タブには個別のIDが必要です。したがって、これらの2つのタブはリストビューを共有しますが、タブの種類によってアイテムを選択するときに表示されるアクティビティが決まります。同じ活動をしている間にタブをどのように参照するかについての考えはありますか? – spentak

+0

こんにちはもう一度:)いいえ、tabSpecは両方のタブで同じ名前を持つ必要はありません - 私のコードでわかるように、私は2回呼び出すtabSpec = tabHost.newTabSpec( "tabSpec");つまり、2回目の初期化後のtabSpecは完全に新しいインスタンスであり、メソッドnewTabSpec(Stringタグ)のパラメータも同じである必要はありません。正直言って私はあなたと私のコードの違いはどこにあるのか分からない:)コメントの2番目の部分について私の編集された答えを確認してください。 –

0

tabspecごとに異なるタグを使用してください。

tabSpec = tabHost.newTabSpec("tabSpec"); 
tabSpec = tabHost.newTabSpec("tabSpec2"); 

これが役に立ちます。

関連する問題