我正在尝试在轮询服务器时打开一个进度对话框。类是活动组,因为它嵌套在选项卡栏中。要使视图保持在框架内,需要活动组。下面是我的ActivityGroup类的声明:
public class CheckInActivity extends ActivityGroup{
...
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.checkin);
new LocationControl().execute(this);
现在,我的AsyncTask类位于相同的checkInactivityClass中:
private class LocationControl extends AsyncTask<Context, Void, Void>
{
private final ProgressDialog dialog = new ProgressDialog(CheckInActivity.this);
protected void onPreExecute()
{
this.dialog.setMessage("Determining your location...");
this.dialog.show();
}
当我运行给定的应用程序时,它将通过一个与WindowManager$BadTokenException相关的错误。声明它不能用未知标记启动窗口。我试着制作了一个示例应用程序,它只是一个常规的活动(不是活动组),运行得很好。
是否有人知道如何修改它以使其工作,或是允许进度条嵌套在选项卡栏中的变通方法?任何帮助都非常感谢。
最佳答案
如果活动组位于tabactivity中,则嵌套的活动具有两个以上的级别。安卓目前不支持这一点,但有一个解决办法。必须将父活动传递给对话框。
在Activity类中为此目的创建帮助器方法:
private Context getDialogContext() {
Context context;
if (getParent() != null) context = getParent();
else context = this;
return context;
}
然后换线
private final ProgressDialog dialog = new ProgressDialog(CheckInActivity.this);
到
private final ProgressDialog dialog = new ProgressDialog(getDialogContext());