これは本当にシンプルなはずですが、うまくいきません。私が望むのは、同じアクティビティクラスを使用する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 :
ここで重要なのは、両方のタブに同じタブスペック名を使用することです。これは両方のタブで同じアクティビティを取得しますが、各タブには個別のIDが必要です。したがって、これらの2つのタブはリストビューを共有しますが、タブの種類によってアイテムを選択するときに表示されるアクティビティが決まります。同じ活動をしている間にタブをどのように参照するかについての考えはありますか? – spentak
こんにちはもう一度:)いいえ、tabSpecは両方のタブで同じ名前を持つ必要はありません - 私のコードでわかるように、私は2回呼び出すtabSpec = tabHost.newTabSpec( "tabSpec");つまり、2回目の初期化後のtabSpecは完全に新しいインスタンスであり、メソッドnewTabSpec(Stringタグ)のパラメータも同じである必要はありません。正直言って私はあなたと私のコードの違いはどこにあるのか分からない:)コメントの2番目の部分について私の編集された答えを確認してください。 –