タブを作成したいwithout TabActivityを拡張します。 (理由は、TabActivityがカスタムタイトルバーを処理できないためです)。私が持っています
public class startTab extends Activity {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.mylayout);
Resources res = getResources();
LocalActivityManager mlam = new LocalActivityManager(this, false);
TabHost tabHost = (TabHost) findViewById(R.id.tabhost);
tabHost.setup(mlam);
TabHost.TabSpec spec;
Intent intent;
intent = new Intent().setClass(this, Show1.class);
spec = tabHost.newTabSpec("Items").setIndicator("Items", res.getDrawable(R.drawable.items32_ldpi)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, Show2.class);
spec = tabHost.newTabSpec("Users").setIndicator("Users",res.getDrawable(R.drawable.user32_ldpi)).setContent(intent);
tabHost.addTab(spec);
}
}
私が得るエラーは
07-02 07:11:12.715: ERROR/AndroidRuntime(411):
Caused by: Java.lang.IllegalStateException: Activities can't be added until the containing group has been created.
ビューのxmlは
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/tabhost" Android:orientation="vertical" Android:layout_width="fill_parent"
Android:layout_height="fill_parent" >
<LinearLayout Android:orientation="vertical"
Android:layout_width="fill_parent" Android:layout_height="fill_parent"
Android:paddingTop="5dip">
<TabWidget Android:id="@Android:id/tabs"
Android:layout_width="fill_parent" Android:layout_height="fill_parent"></TabWidget>
<FrameLayout Android:id="@Android:id/tabcontent"
Android:layout_width="fill_parent" Android:layout_height="fill_parent"
Android:paddingTop="5dip">
</FrameLayout>
</LinearLayout>
</TabHost>
LocalActivityManagerを使用する必要があることをどこかで読みましたが、何かが欠けていると思います。誰でもアイデア?
ありがとう!
TabHost.setup(mLocalActivityManager)を呼び出す前に;この行を追加する必要があります。
mlam.dispatchCreate(savedInstanceState);
tabHost.setup(mlam );
同様に、onResumeに追加する必要があります。
mlam.dispatchResume();
onPause()、
mlam.dispatchPause(isFinishing());
public class ScoreboardActivity extends Activity {
LocalActivityManager mlam;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scoreboard);
mlam = new LocalActivityManager(this, false);
mlam.dispatchCreate(savedInstanceState);
TabHost th = (TabHost) findViewById(Android.R.id.tabhost);
th.setup(mlam);
th.addTab(th.newTabSpec("Numpad").setIndicator("Numpad").setContent(R.id.tab1));
th.addTab(th.newTabSpec("CardCount").setIndicator("CardCount").setContent(R.id.tab2));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_scoreboard, menu);
return true;
}
@Override
protected void onResume(){
super.onResume();
mlam.dispatchResume();
}
@Override
protected void onPause(){
super.onPause();
mlam.dispatchPause(isFinishing());
}
}
設計上の考慮事項にもかかわらず、以下はまったく機能せず、APIはsetContent(Intent i)
が有効であることを示しているようです。これは、アクティビティがTabActivity
を拡張するときに機能しますが、Activity
を拡張し、setup()
呼び出しを追加すると、exception at Android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.Java:649)
になります。
面白いことに、LogCatはsetup()
を呼び出すのを忘れたことを示唆しています
mTabHost = (TabHost) findViewById(Android.R.id.tabhost);
mTabHost.setup();
Intent tab1Intent = new Intent(this, ActivityOne.class);
Button tab1View = new Button(this);
tab1View.setText("Activity 1");
mTabHost.addTab(mTabHost.newTabSpec("tab_1").setIndicator(tab1View).setContent(tab1Intent));