0

タブホストとタブスペックを含むクラス以外のクラスから、タブホストで setCurrentTab を呼び出すことができるかどうか尋ねています。

入れますか

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);
}

}

静的変数にすることはできますか? どうすればこれを達成できますか?

ご清聴ありがとうございました!

4

3 に答える 3

6

あなたは確かにできます。あなたの状況では、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);

注:私が提供したのは完全なシングルトン実装ではありませんが、実行していることには十分なはずです。タブを設定しているクラスによってはMain.getInstance()、メソッドを呼び出す前に、それがnullでないことを確認することをお勧めしますsetCurrentTab()

于 2011-06-21T13:18:15.740 に答える
3

しかし、別のアクティビティに参加している場合は、とにかくタブが表示されませんか?

ListViewで同様の問題が発生し、ItemClickでtabHostアクティビティを開始して機能させました。インテントを介して、表示したいtabNumberを渡し、setCurrentTabを使用して現在のタブを渡されたタブ番号に設定しました。しかし、これがあなたのために働くかどうかはわかりません。

編集:これが私がそれをした方法です:

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

次に、tabHostアクティビティで:

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

//tabHost code goes here

tabHost.setCurrentTab(tabNumber);    
于 2011-06-21T13:18:38.220 に答える
3

アクティビティ FirstTab、SecondTab、ThirdTab では、次のようなメソッドを使用する必要があります。

boolean setCurrentTab(int i) {
    if (getParent() instanceof Main) {
        ((Main) getParent()).getTabHost().setCurrentTab(i);
        return true;
    }
    return false;
}
于 2011-06-21T13:56:05.627 に答える