I\'m asking if we can call a setCurrentTab on a tabhost from another class than the class that contains the tabhost and tabspecs?
Can we put
tabHost.
In your activities FirstTab, SecondTab and ThirdTab you should use the method like:
boolean setCurrentTab(int i) {
if (getParent() instanceof Main) {
((Main) getParent()).getTabHost().setCurrentTab(i);
return true;
}
return false;
}
You sure can. For your situation, a singleton of the TabActivity may work best. For example:
public class Main extends TabActivity{
private staic Main theInstance;
public static getInstance() {
return Main.theInstance;
}
public Main() {
Main.theInstance = this;
}
// The rest of your code here.
}
Then, from another class, you can just call:
Main.getInstance().getTabHost().setCurrentTab(1);
NOTE: What I have provided is not a complete singleton implementation, but it should suffice for what you're doing. Depending on the class you're setting the tab from, you may want to check that Main.getInstance()
is not null before calling the setCurrentTab()
method.
But if you are in another activity, you won't see the tabs anyway will you?
I had a similar problem with a ListView which started the tabHost activity onItemClick to get that working, i passed the tabNumber i wanted to display, through the intent, then used setCurrentTab to set the current tab to the passed tab number. Not sure if this would work for you though.
EDIT: Here is how i did it:
Intent i = new Intent(this, TabHostActivity.class);
i.putExtra("TabNumber", tabNumberToBeSelected); //tabNumberToBeSelected is an int
startActivity(i);
and then in the tabHost activity:
int tabNumber = getIntent().getIntExtra("TabNumber", 0);
//tabHost code goes here
tabHost.setCurrentTab(tabNumber);