2011-05-11 28 views
2

私は2つのタブレポートとチャートを持っています。グラフタブでは、ボタンをクリックすると別のアクティビティ 'グラフ'が表示されます。今、 'グラフ'アクティビティのボタンをクリックすると、レポートタブに戻り、チャートタブに戻らないようにします。活動中のSOタブをプログラム的に切り替える

「グラフ」私はtabhostがTabActivityクラスのXMLで作成されていた場合、これはおそらく動作します

final TabHost tabHost = (TabHost) getParent().findViewById(android.R.id.tabHost); 
    btnBackToReports.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      tabHost.setCurrentTab(1); 
     } 
    }); 

、私はこれを行う必要があると思いました。しかし、私はxmlにtabhostを作成していません。だから私はできないfindViewById(android.R.id.tabhost)。私はこのようなjavaファイルで作成しています。

TabHost tabHost = getTabHost(); 
TabHost.TabSpec chartsSpec = tabHost.newTabSpec("charts").setIndicator("Charts") 
            .setContent(new Intent(this, Charts.class)); 
            tabHost.addTab(chartsSpec); 

これで、どのようにしてtabHostのIDを取得できますか? TabHostにIDをプログラムで設定することは可能ですか?

ご協力いただきまして誠にありがとうございます。

+0

はあなたの応答のために、君たちに感謝します。しかし、私はデザインを変更しました。この「グラフ」アクティビティを持っていたのは、タブバーを隠すことができないことがわかっていなかったからです。今、私はタブバーを隠すことができることを発見したので、私は一緒に 'グラフ'アクティビティを削除しました。今では、[グラフ]タブ自体で 'グラフ'アクティビティのすべてを実行しています。タブバーを隠すことができるので、これを行うにはグラフタブに十分なスペースがあります。だから、フルスクリーンモードになっているチャートタブの戻るボタンをクリックすると、別のタブに切り替えてタブバーを置き換えることができます。 – sherry

答えて

1

Hm、これには多くの解決策があります。削除

バリアント1)(、)

バリアント2愚かだった) あなたが持っているホストのタブや放送受信機での活動に、タブを変更したい活動からのブロードキャストを送信することができタブホストへのアクセス。

+1

バリアント1は、アクティビティが破棄された後でもビューとアクティビティのコンテキストが利用可能なので、メモリリークを引き起こします。 –

+0

はい、あなたは正しいです。だからこそ、私はそれを「あまりうまくいきません」とマークしました。誰かがこの悪いコードを使用する前に削除しました...: -/ – 3dmg

+0

この問題の潜在的な解決策になる可能性があります。 – sherry

1

1つのアクティビティのUIを別のアクティビティから変更することはできません(よく、可能ですが、ですが、試してはいけません)。

グラフアクティビティを開始するときは、startActivityForResultを使用することをお勧めします。 はその後、誰かがあなたのボタンをクリックしたとき、あなたはタブで

public void onClick(View v) { 
    Intent intent = new Intent(); 
    intent.putExtra("selected_tab", 1); 
    setResult(Activity.RESULT_OK); 
    finish(); 
} 

とあなたの活動の操作を行うことができ

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == Activity.RESULT_OK && data != null) { 
     int selectedTab = intent.getIntExtra("selected_tab", 0); 
     if (selectedTab == 1) { 
      tabHost.setCurrentTab(1); 
     } 
    } 
} 
+0

私はUIを変更しようとしていませんでした。私は、アクティビティを呼び出した親タブではなく、別のタブに切り替えるだけでした。あなたの提案は非常に有望で、実装が非常に簡単であるように思えます、ありがとうございます。 – sherry

+0

ええと、その場合、親アクティビティへの参照をタブ内の子アクティビティに渡すことができます。子アクティビティのボタンをクリックすると、渡された親アクティビティのメソッドが呼び出されます。 –

関連する問題