1

我正在使用TabActivity (Main)带有 3 个 TabSpecs 的 a 我正在使用 Intents 作为 3 个 Tabs 的内容 ,TabA例如。TabBTabC

所有这些选项卡活动都使用存储在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正确的实例是它的 anActivity而不是 a TabATabB或者TabC

也许我对整件事完全采取了错误的方法。

我还阅读了很多关于不将活动用于选项卡内容而不是使用视图的信息。但是我不知道用什么视图来替换我<RelativeLayout />的,因为我不能使用我的 R.layout.* 作为视图。

4

2 回答 2

2

如果您更改了common_datasharedPreferences您也可以OnSharedPreferenceChangeListener在 Activites 中实现并检查key.equals("common_data").

于 2010-09-03T11:50:07.327 回答
0

您可以扩展 Activity 并使所有子活动从扩展活动继承,因为这样您将在 1 个活动(父活动)中实现相同的代码(服务处理)。

Activity -> MyParentActivity -> MyChildActivity1

这样,您将能够将所有子活动转换为 MyParentActivity 并运行您的自定义方法(您希望被实现)

于 2010-07-27T11:36:47.427 回答