gpt4 book ai didi

android - 带有 BroadcastReceiver 的 TabActivity 子 Activity 在后台保持 Activity 状态

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:17:24 26 4
gpt4 key购买 nike

我有一个名为 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) 上的一个 Activity 注册了一个 BroadcastReceiver,以便在特定事件发生时,选项卡将刷新其显示的数据。我没有在 onPause 中注销 BroadcastReceiver,因为我希望此 Activity 能够自行刷新,即使它当前不在前面也是如此。



public class MyTab2 extends Activity {

//监听器接收来自变化的 Activity 的广播
//此 Activity 需要在 View 上刷新的数据
保护类 MyListener 扩展 BroadcastReceiver {
public void onReceive(Context context, Intent Intent ) {
如果 (intent.getAction().equals("myapp.REFLECT__CHANGES")) {
//从服务器请求新数据
刷新数据();
}
}
}

protected void onResume() {
//如果监听器还没有注册,注册它
//通常我们会在暂停时注销监听器,但我们想要
//即使 Activity 不在前面,监听器也会触发
如果(!listenerIsRegistered){
registerReceiver(监听器,新的 IntentFilter(“myapp.REFLECT_CHANGES”));
listenerIsRegistered = 真;
}
super.onResume();
}

我的问题是,我发现即使在备份到显示 MyTabActivity 之前的 Activity 并再次启动 MyTabActivity 之后,在第一次进入 MyTabActivity 时创建的 MyTab2 实例似乎仍然存在当我广播触发选项卡刷新其数据的事件时,MyTab2 的旧实例和 MyTab2 的新实例都在刷新,因为它们都接收到广播。我的问题是如何在退出 TabActivity 时终止 TabActivity 的所有子 Activity ?

子 Activity 的旧实例是否仍然存在,因为当 Activity 离开前台时我没有取消注册 BroadcastReceiver?

您可以想象,每次启动后续 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);

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

关于android - 带有 BroadcastReceiver 的 TabActivity 子 Activity 在后台保持 Activity 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13184070/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com