TabActivity将额外内容传递给子意图

时间:2010-12-03 00:40:44

标签: android

我有三项活动:

活动A - 显示网站的数据列表。通过此活动,您可以执行一项操作,该操作会向此列表添加内容(活动B)。

活动B - 这是向网站添加数据的活动。成功完成后,此活动将需要告知活动A刷新其列表。

活动T - 包含活动A的TabHost。

我的问题是:

活动B需要告诉活动A刷新,但其意图必须是活动T,因为我希望TabHost显示活动A.

//ActivityB.class
Intent myIntent = new Intent(v.getContext(), ActivityT.class);
myIntent.putExtra("target", "ActivityA");
myIntent.putExtra("refreshData", true);
startActivityForResult(myIntent, 0);

我以为我可以使用TabHost作为中间人,如果设置的话,只需将附加内容传递给Activity A,如下所示:

//ActivityT.class
Bundle extras = getIntent().getExtras();

// Create an Intent to launch an Activity for the tab (to be reused)
intent = new Intent().setClass(this, ActivityA.class);

// Check to see if we want to pass our bundle through to the activity
if (extras != null && extras.getString("target").equals("activityA")) {
     intent.putExtras(extras);
}

// Initialize a TabSpec for each tab and add it to the TabHost
spec = tabHost.newTabSpec("Tab1").setIndicator("Tab1",
            res.getDrawable(R.drawable.ic_tab_tab1)).setContent(intent);
tabHost.addTab(spec);

这很好用,除了当我将标签更改为不同的标签并更改回来时,额外的内容会再次传递 - 这会导致我的标签每次刷新其数据,即使我不再来自活动B.这是因为TabActivity不会在标签更改时重新创建,因此额外内容总是传递给子意图。

那么,我如何告诉活动A仅从活动B刷新,但仍然会显示TabHost?

2 个答案:

答案 0 :(得分:0)

我最终强行解决了这个问题并复制了TabHost,TabActivity和TabWidget代码,并根据我的需要自定义它来解决这个问题。这不是我为之骄傲的事情,但却成功了。

它也有点有用,因为我做了一些小的其他调整,以便更容易做其他事情。

答案 1 :(得分:0)

虽然可能不是最优雅的解决方案,但我在ActivityA类中使用了静态数据成员,我可以从ActivityB中设置。

//ActivityA.class

public static boolean refreshData = false;

public void onResume() {
    if (refreshData) {
         mRefreshData();
         refreshData = false;
    }
}

//ActivityB.class

ActivityA.refreshData = true;
Intent myIntent = new Intent(v.getContext(), ActivityT.class);
startActivityForResult(myIntent, 0);

我很想知道是否有更好的方法来做这种事情!