3

5 つのタブを持つアクティビティがあります。タブ 1 からタブ 2 またはタブ 3 に移動すると、すべて問題ないように見えます。プログラムでタブ 2 からタブ 1 に戻るにはどうすればよいですか?

    Intent myIntent = new Intent(this, Tab1.class);             
    myIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(myIntent);

タブなしでアクティビティ 1 を開始するため、これは正しく機能していません。

タブ 1 からタブ 2 に移動すると、タブ 1 とタブ 2 の両方が表示されます (現在のタブがアクティブになっています)。しかし、タブ 2 からタブ 1 に移動すると、タブ 1 とタブ 2 の両方がアクティビティから消えます。何が原因でしょうか?

4

4 に答える 4

2

これは確かにあなたを助けるでしょう。

TabHost tabHost =  (TabHost) getParent().findViewById(android.R.id.tabhost);
tabHost.setCurrentTab(1);  

または、このリンクを参照できます

Android でボタンクリックを使用してプログラムでタブを切り替える方法

ありがとう :)

于 2012-07-24T12:20:19.610 に答える
1

finish() メソッドを使用するだけです

public void onClick(View v) 
{                             
    finish();
    startActivity(new Intent(Activity2.this, Activity1.class));            
}     
于 2012-07-24T12:21:41.983 に答える
0

についてはわかりませんがIntent.FLAG_ACTIVITY_CLEAR_TOP、必要になることはありませんが、タブを失うという前述の効果は、startActivity()タブの1つではなく、TabHostから呼び出すことによって生成されます。その場合は、通話をそこに移動すると、タブが表示されたままになります。

于 2012-07-24T12:26:51.387 に答える
0

同様の状況がありますが、どの回答も役に立たないようです。だから、私はここに私の解決策を投稿します:

// tab selection history, each tab has a tag which is a string
private List<String> tabIdHistory = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstance) {
    super.onCreate(savedInstanceState);
    // this layout contains TabHost and TabWidget
    setContentView(R.layout.activity_main); 

    TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost);
    tabHost.setup();
    tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {

        @Override
        public void onTabChanged(String tabId) {
            tabIdHistory.remove(tabId); // ensure uniqueness
            tabIdHistory.add(tabId);
        }
    });
    // continue your tab initialisation, such as
    // tabHost.addTab(tabHost.newTabSpec(TAG)
    //         .setContent(...).setIndicator(...));
}

@Override
public void onBackPressed() {
    if (tabIdHistory.size() > 1) {
        // pop the current last item, we want the second last
        tabIdHistory.remove(tabIdHistory.size() - 1);
        tabHost.setCurrentTabByTag(tabIdHistory.get(tabIdHistory.size() - 1));
    } else {
        super.onBackPressed();
    }
}

select tab#1、tab#3、tab#2、tab#1 を使用する場合、バック スタックは "3, 2, 1" であり、ユーザーが [戻る] ボタンを 3 回押すと、アプリはメイン画面に戻ります。完全な履歴を保持する場合は、次の行をコメントアウトします。

tabIdHistory.remove(tabId);

于 2014-10-20T22:26:14.203 に答える