9

I have a TabActivity and am going to have 3 or 4 tabs.

In TabA, I would like to have an ExpandableListView, which will list products. I would like TabC to act as a sort of "shopping cart", probably with a ListView of itself.

Is there a way to interact with the TabHost from the Activity? I would like to be able to click a button inside of TabA and have it update and switch to TabC. Is this possible? Can I get the Tab's activities call its parents methods?

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Josh Lillie
  • 106
  • 1
  • 1
  • 3

4 Answers4

16

If you implement your tabs as views, rather than individual activities, this would be far simpler, run faster, take up less memory, and be a better solution IMHO.

That being said, in the Tab A Activity, call getParent() to get at the TabActivity. Then, you can use the methods pointed out by disretrospect.

CommonsWare
  • 986,068
  • 189
  • 2,389
  • 2,491
  • 5
    +1 for the getParent() tip - although I do not understand the recommendation to use views instead of activities. I prefer activities to seperate the life cycles and also to seperate the code belonging to each tab. – FrVaBe Feb 23 '11 at 13:57
  • @K. Claszen: "to seperate the life cycles" -- their lifecycles aren't separate. "also to seperate the code belonging to each tab" -- code separation in the form of Java class files has been around for 15 years. You do not need to use separate activities for this. – CommonsWare Feb 23 '11 at 14:05
  • 1
    Thanks for the response. As I observe, the activities lifecycle methods (onCreate, etc.) are only called if the associated tab is selected. And I like to be able to extend provided activities like `ExpandableListActivity` in a tab. However, both possibilities are provided and make sence depending on the requirement so I just wondered if there could be a general recommendation. – FrVaBe Feb 23 '11 at 14:26
3

Try to use this code to change activity within a tab:

TabActivity parent = (TabActivity) getParent();
TabHost tabhost = parent.getTabHost();
tabhost.setCurrentTab(0);
Kijewski
  • 25,517
  • 12
  • 101
  • 143
Randy V
  • 31
  • 2
1
  1. In your Activity, use getParent() to get the TabActivity parent
  2. In your TabActivity class, use getLocalActivityManager().getActivity(tabId) to get the Activity object
  3. call the Activity object's method
Jack Cheung
  • 255
  • 2
  • 6
1

You can call getTabHost from a TabActivity, see public TabHost getTabHost().

See Tabhost for setCurrentTab, public void setCurrentTab(int index).

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
m6tt
  • 4,223
  • 1
  • 22
  • 20