1

たとえば、 3つのタブのコンテンツにインテントを使用しTabActivity (Main)ている3つのTabSpecを使用してい ます。TabATabBTabC

これらのタブアクティビティはすべて、に保存されている共通データを使用しますSharedPreferences

更新オプションのMain TabActivityあるオプションメニューがあります。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.refresh_menu:
        new updateCommonDataFromWeb().execute();

    ...
    }
}

この更新では、AsyncTask(updateCommonDataFromWeb)を使用してWebから共通データを再ロードします。

3つのタブのアクティビティに、ビューを更新し、新しくダウンロードしたデータからコンテンツを再構築するように指示する方法が必要です。

タブアクティビティが最初に作成されるとき、次のSharedPreferencesようにデータをロードします。

public class TabA extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.taba);

        SharedPreferences prefs = getSharedPreferences(this.getString(R.string.prefs_name), 0);
        String usage_data = prefs.getString("common_data", "");
    }
}

私は、次のような各タブアクティビティで共通の方法を作成することを考えました。reloadViewData()

からアクティビティマネージャーを使用してMain TabActivity、現在のタブのアクティビティを次のように取得できると思いました。

String tabTag = tabHost.getCurrentTabTag();
Activity activity = getLocalActivityManager().getActivity(tabTag);
# then call the reloadData() method of the tab activity
activity.reloadViewData();

残念ながら、このアプローチを機能させることはできませんがactivity、正しいインスタンスは、、またはActivityTabATabBTabC

たぶん私は全体に対して完全に間違ったアプローチをとっています。

また、ビューを使用する代わりにタブコンテンツにアクティビティを使用しないことについてもたくさん読みました。<RelativeLayout />ただし、R.layout。*をビューとして使用できないため、どのビューを使用して置換するかわかりません。

4

2 に答える 2

2

を変更しcommon_dataた場合は、ActivitesにsharedPreferences実装して、を確認することもできます。OnSharedPreferenceChangeListenerkey.equals("common_data")

于 2010-09-03T11:50:07.327 に答える
0

アクティビティを拡張し、すべての子アクティビティを拡張アクティビティから継承するようにすることができます。これにより、1つのアクティビティ(親)に同じコード(サービス処理)を実装できます。

Activity -> MyParentActivity -> MyChildActivity1

このようにして、すべての子アクティビティをMyParentActivityにキャストし、カスタムメソッドを実行できます(実装する必要があります)

于 2010-07-27T11:36:47.427 に答える