我正在使用嵌套标签活动。
TabMain(TabHost),我有ChildTab(另一个TabHost)和其他2个活动。
我可以在其他2项活动中显示进度对话框。
但是在ChildTab TabActivity中我添加了5个活动
因为我能够显示progressDialog。
我收到以下错误。
ERROR / AndroidRuntime(339):引起:android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌android.app.LocalActivityManager $ LocalActivityRecord@43d304f0无效;你的活动在运行吗?
答案 0 :(得分:8)
尝试ProgressDialog progressDialog = ProgressDialog.show(getParent(), "Loading...", "Please wait...");
......我认为这会让事情变得糟透。
答案 1 :(得分:2)
确定。我也发现了这个错误并且在我找到解决方案之前变得很生气。 上面的答案是正确的,但在我的情况下,我有一个嵌套的应用程序由/ more活动组中的选项卡/活动组和内部的单个活动组成。在获得应用程序的上下文之前,您需要根据需要增加多个级别。就我而言,有两个:
public static Activity goUp(Activity current){
if(current.getParent()!=null){
current=current.getParent();
goUp(current);
}
return current;
}
ProgressDialog progressDialog = ProgressDialog.show(goUp(MyActivity.this), "Loading...", "Please wait...");
答案 2 :(得分:2)
丑陋的解决方案:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
parent = (ConfigurarionStyleAndroidGUI) getParent();
addPreferencesFromResource(R.xml.ui_settings);
EditTextPreference p = (EditTextPreference) getPreferenceManager().findPreference(getString(R.string.key_settings_style_name));
forceContext(parent,p);
}
private void forceContext(Context context,Preference p){
try {
Field field = Preference.class.getDeclaredField("mContext");
field.setAccessible(true);
field.set(p, parent);
} catch (Exception e) {
e.printStackTrace();
}
}
答案 3 :(得分:1)
如果getParent()不适合您,请尝试仅使用TabsActivity.context
(或替换父标签活动类的名称)。我正在使用嵌套活动,因此使用getParent()仍然没有为对话框返回正确的上下文。
在尝试了上述建议的20种不同变体后,我更换了这一行:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
使用:
AlertDialog.Builder builder = new AlertDialog.Builder(TabsActivity.context);
它就像一个魅力。您还需要在TabsActivity类中创建上下文变量。类似于onCreate方法中的public static TabsActivity context;
和context=this
。