I am developing application for Android tablets. I have a 7" tablet, and in my application I want to call an activity when I click on a tab. When i click on a tab it shows error. Could you tell me what I did wrong in the code?
Here's the full source code:
public class Home extends Activity {
private TabHost thEvent;
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
thEvent = (TabHost) findViewById(android.R.id.tabhost);
thEvent.setup();
// Tab 1
TabHost.TabSpec specs = thEvent.newTabSpec("tag1");
specs.setContent(R.id.tab1);
// code for calling other activity
specs.setContent(new Intent(Home.this, PhotosActivity.class));
specs.setIndicator("Readymade");
thEvent.addTab(specs);
specs = thEvent.newTabSpec("tag2");
specs.setContent(R.id.tab2);
specs.setIndicator("Speciality");
thEvent.addTab(specs);
specs = thEvent.newTabSpec("tag3");
specs.setContent(R.id.tab3);
specs.setIndicator("Tailormade");
thEvent.addTab(specs);
specs = thEvent.newTabSpec("tag4");
specs.setContent(R.id.tab4);
specs.setIndicator("Low Price");
thEvent.addTab(specs);
specs = thEvent.newTabSpec("tag5");
specs.setContent(R.id.tab5);
specs.setIndicator("Corporate");
thEvent.addTab(specs);
specs = thEvent.newTabSpec("tag6");
specs.setContent(R.id.tab6);
specs.setIndicator("Special Offers");
thEvent.addTab(specs);
specs = thEvent.newTabSpec("tag7");
specs.setContent(R.id.tab7);
specs.setIndicator("More");
thEvent.addTab(specs);
}
}
Logcat:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.kesaritab2/com.example.kesaritab2.Home}: java.lang.IllegalStateException: Did you forget to call 'public void setup(LocalActivityManager activityGroup)'?
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: Did you forget to call 'public void setup(LocalActivityManager activityGroup)'?
at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:747)
at android.widget.TabHost.setCurrentTab(TabHost.java:413)
at android.widget.TabHost.addTab(TabHost.java:240)
at com.example.kesaritab2.Home.onCreate(Home.java:33)
at android.app.Activity.performCreate(Activity.java:5133)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
... 11 more
According to the documentation on TabHost, you should be calling TabHost.setup (LocalActivityManager)
as you are using it in conjunction with TabHost.setContent(Intent)
:
If you are using setContent(android.content.Intent), this must be called since the activityGroup is needed to launch the local activity. This is done for you if you extend TabActivity.
In other words, if you simply have your activity extend TabActivity, it will make your life considerably easier, but note that TabHost constructions have been deprecated in favor of using the tabbed action bar mode.