我有三项活动:
活动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?
答案 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);
我很想知道是否有更好的方法来做这种事情!