我有一个名为mytabactivity的tabactivity,它包含使用以下代码创建的几个选项卡:

public class MyTabActivity extends TabActivity {

    public void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.my_tabs);
        tabHost = (TabHost)findViewById(android.R.id.tabhost);
        tabHost.getTabWidget().setDividerDrawable(R.drawable.tab_divider);
        Intent intent = new Intent().setClass(this, MyTab1.class);
        setupTab(new TextView(this), "Tab1", intent);
        intent = new Intent().setClass(this, MyTab2.class);
        setupTab(new TextView(this), "Tab2", intent);
        intent = new Intent().setClass(this, MyTab3.class);
        setupTab(new TextView(this), "Tab3", intent);
    }

    private void setupTab(final View view, final String tag, Intent intent) {
        View tabview = createTabView(tabHost.getContext(), tag);
        TabHost.TabSpec setContent = tabHost.newTabSpec(tag).setIndicator(tabview).setContent(intent);
        tabHost.addTab(setContent);
    }

    private static View createTabView(final Context context, final String text) {
        View view = LayoutInflater.from(context).inflate(R.layout.tabs_bg, null);
        TextView tv = (TextView) view.findViewById(R.id.tabsText);
        tv.setText(text);
        return view;
    }
}

选项卡上的一个活动(mytab2)注册了一个广播接收器,以便在特定事件上,选项卡将刷新其显示的数据。我没有在onpause中注销广播接收器,因为我希望此活动刷新自身,即使它当前不在前面。
ojit_pre
我的问题是,我发现即使在备份到mytabactivity显示之前的活动并再次启动mytabactivity之后,在mytabactivity的第一个入口创建的mytab2实例似乎仍然存在,并且当我广播偶数时触发选项卡刷新其数据的t,即mytab2的旧实例和mytab2的新实例都在刷新,因为它们都接收广播。
我的问题是,当退出tabactivity时,如何杀死tabactivity的所有子活动?
儿童活动的旧实例是否仍然存在,因为当活动离开前端时,我没有注销广播接收器?
正如您可以想象的那样,每次启动后续的mytabactivity时,这个问题都会变得复杂。

最佳答案

无需广播:
同意这样做:

Intent intent = new Intent().setClass(this, MyTab1.class);
        setupTab(new TextView(this), "Tab1", intent);
        intent = new Intent().setClass(this, MyTab2.class);
        setupTab(new TextView(this), "Tab2", intent);
        intent = new Intent().setClass(this, MyTab3.class);
        setupTab(new TextView(this), "Tab3", intent);

就这样做
 tabHost = (TabHost)findViewById(android.R.id.tabhost);
        tabHost.getTabWidget().setDividerDrawable(R.drawable.tab_divider);
        Intent intent = new Intent().setClass(this, MyTab1.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        setupTab(new TextView(this), "Tab1", intent);
        intent = new Intent().setClass(this, MyTab2.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        setupTab(new TextView(this), "Tab2", intent);
        intent = new Intent().setClass(this, MyTab3.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        setupTab(new TextView(this), "Tab3", intent);

就这样,你的问题就解决了

09-05 03:45