0

シナリオは次のとおりです。4 つのタブを持つアクティビティがあり、各タブには異なる意図があり、各意図には異なるアクティビティがあります。完璧に動作します。

私が必要としているのは、いずれかのタブの意図をどうにかして変更することです。で使用される Intent に追加のパラメーターを追加するのと同じくらい簡単ですが、TabSpec.setContent(intent)その意図を取得して変更する方法が見つかりませんでした。

私がやろうとしている特定のアクションは次のとおりです。別のアクティビティ(別のタブのコンテンツ内)から、その親( )を呼び出して別のタブTabActivityを開き、そのタブのアクティビティにカスタムデータを追加します。

問題なくタブを変更できますが、作成に使用された元の意図には追加のパラメーターがなかったため、あるアクティビティから別のアクティビティに追加のパラメーターを渡す方法が見つかりませんでしたTabSpec

私はこれに間違った方法でアプローチしていますか?

TabSpecコンテンツの意図を置き換える方法はありますか?

ありがとう !

4

3 に答える 3

1

私の場合、インテントへの参照をTabActivityに保存しています

mGalleryTabIntent = new Intent(this, AnActivity.class);
spec = getTabHost().newTabSpec(TAB_GALLERY).setIndicator(res.getString(R.string.footer_gallery),res.getDrawable(R.drawable.gallery_icon_sel)).setContent(mGalleryTabIntent); 

public Intent getStoredTabIntent(){
    return mGalleryTabIntent;
  }

次に、子供から別のタブに移動したいときに、インテントと一緒にエクストラを渡します

    MainTabActivity parent = (MainTabActivity)getParent();
    parent.getStoredTabIntent().putExtra(AnActivity.START_VIEW, AnActivity.PAGE_TWO);

    //Navigate to the tab
    parent.getTabHost().setCurrentTabByTag(AnActivity.TAB_GALLERY);

次に、AnActivityのonCreateで

Bundle extras = getIntent().getExtras();
if(extras != null && extras.containsKey(START_VIEW)){
  switch (extras.getInt(START_VIEW)) {
    case PAGE_TWO:
      doSomething();
      break;

    default:
      break;
  }

  //Erase the Extra so that navigating to this Tab always displays the standard view unless specified otherwise
  MainTabActivity parent = (MainTabActivity)getParent();
  parent.getStoredTabIntent().putExtra(AnActivity.START_VIEW, "");
}else{
  doStandardStuff();
}

アプリケーションソリューションも優れていますが、他に必要になるとは思わないので、アクティビティを使い続けたいと思います。

于 2011-11-09T09:32:18.447 に答える
1

アクティビティ間で値を渡す方法を探しているだけの場合は、Application クラスをオーバーライドできます。

アプリ コンテキストの使用方法。

アプリケーション クラスを拡張し、その属性として値を追加します。どのアクティビティでも、以下のコードを呼び出すと、シングルトンが返されます。

MyApplication appContext = (MyApplication) getApplicationContext();

これを機能させるには、これをマニフェスト ファイルの application タグに追加する必要があります。

 android:name=".MyApplication"

このメソッドは、インテントを介して送信できない場合に、アプリ内で値を渡すために使用されます。

タブを削除するには、clearAllTabs() メソッドを使用して、タブを再度追加する必要があります。上記のコードはより良いはずです。

于 2011-10-10T12:55:00.367 に答える
0
TabSpec tabspec1;

private void createTabHost() {

    // initialize tabHost
    tabHost = (TabHost) this.findViewById(R.id.tabhost1);
    tabHost.setup(this.getLocalActivityManager());

    // create tab1
    Intent intent = new Intent(this, AnotherActivity.class).addFlags(
            Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("myData",
                ObjData);
    tabspec1 = tabHost.newTabSpec("tab1")
            .setIndicator(Utilities
                    .prepareTabView(this, "Title"))
            .setContent(intent);
    tabHost.addTab(tabspec1 );

    // create tab2
       ...
}

タブに配置されたアクティビティのコンテンツを変更するメソッド:

private void reloadTabSpec1() {

        Intent i = new Intent(this, AnotherActivity.class).addFlags(
                Intent.FLAG_ACTIVITY_CLEAR_TOP);
        i.putExtra("myData", ObjData);
        tabspec1.setContent(i);

        // needed for refresh :(
        tabHost.setCurrentTabByTag(tabspec2.getTag());
        tabHost.setCurrentTabByTag(tabspec1.getTag());

}
于 2011-10-10T12:42:23.413 に答える