【问题标题】:Updating views of sub Activities of TabActivity from background process从后台进程更新 TabActivity 的子活动视图
【发布时间】:2010-07-25 16:26:50
【问题描述】:

我正在使用带有 3 个 TabSpecs 的 TabActivity (Main) 我正在为 3 个选项卡的内容使用 Intents 以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) 从网络重新加载公共数据。

我需要一种方法来告诉 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 是正确的实例,它是 Activity 而不是 TabATabBTabC

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

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

【问题讨论】:

    标签: android views android-activity tabactivity


    【解决方案1】:

    如果您更改sharedPreferences 中的common_data,您还可以在活动中实现OnSharedPreferenceChangeListener 并检查key.equals("common_data")

    【讨论】:

      【解决方案2】:

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

      Activity -> MyParentActivity -> MyChildActivity1
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-04
        • 1970-01-01
        相关资源
        最近更新 更多