setCurrentTab вкладкиHost - PullRequest
       6

setCurrentTab вкладкиHost

0 голосов
/ 21 июня 2011

Я спрашиваю, можем ли мы вызвать setCurrentTab для tabhost из другого класса, кроме класса, который содержит tabhost и tabspecs?

Можно ли поместить

tabHost.setCurrentTab(1);

в другой классчем этот:

public class Main extends TabActivity{

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.v("", "Welcome in Main");
    setContentView(R.layout.tab);

    TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost);  // Le TabHost a des Tabs

    TabSpec firstTabSpec = tabHost.newTabSpec("tid1");  // TabSpec: new tab - TabSpec : setContent to the tab
    firstTabSpec.setIndicator("Informations", getResources().getDrawable(R.drawable.database)).setContent(new Intent(this,FirstTab.class));
    tabHost.addTab(firstTabSpec);

    TabSpec secondTabSpec = tabHost.newTabSpec("tid1");
    secondTabSpec.setIndicator("Graphiques", getResources().getDrawable(R.drawable.chart)).setContent(new Intent(this,SecondTab.class));
    tabHost.addTab(secondTabSpec);

    TabSpec thirdTabSpec = tabHost.newTabSpec("tid1");  // tid1 is firstTabSpec Id (used to access outside)
    thirdTabSpec.setIndicator("Réglages", getResources().getDrawable(R.drawable.settings)).setContent(new Intent(this,ThirdTab.class));
    tabHost.addTab(thirdTabSpec);
}

}

Можем ли мы сделать это статической переменной?Как мы можем достичь этого?

Спасибо за ваше внимание!

Ответы [ 3 ]

6 голосов
/ 21 июня 2011

Ты уверен, что можешь. В вашей ситуации лучше всего подойдет один элемент TabActivity. Например:

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.
}

Затем из другого класса вы можете просто позвонить:

.

Main.getInstance () getTabHost () setCurrentTab (1);.

ПРИМЕЧАНИЕ. То, что я предоставил, не является полной одноэлементной реализацией, но этого должно быть достаточно для того, что вы делаете. В зависимости от класса, из которого вы устанавливаете вкладку, перед вызовом метода setCurrentTab() вы можете проверить, что Main.getInstance() не равно нулю.

3 голосов
/ 21 июня 2011

В своей деятельности FirstTab, SecondTab и ThirdTab вы должны использовать такой метод:

boolean setCurrentTab(int i) {
    if (getParent() instanceof Main) {
        ((Main) getParent()).getTabHost().setCurrentTab(i);
        return true;
    }
    return false;
}
3 голосов
/ 21 июня 2011

Но если вы заняты другим делом, вы все равно не увидите вкладки?

У меня была похожая проблема с ListView, который запустил действие tabHost наItemClick, чтобы получить эту работу, я передал tabNumber, который я хотел отобразить, через намерение, затем использовал setCurrentTab, чтобы установить текущую вкладку на переданную вкладкучисло.Не уверен, что это сработает для вас.

РЕДАКТИРОВАТЬ: Вот как я это сделал:

Intent i = new Intent(this, TabHostActivity.class);
i.putExtra("TabNumber", tabNumberToBeSelected); //tabNumberToBeSelected is an int
startActivity(i);

, а затем на вкладке Хост деятельности:

int tabNumber = getIntent().getIntExtra("TabNumber", 0);

//tabHost code goes here

tabHost.setCurrentTab(tabNumber);    
...