我正在尝试在轮询服务器时打开一个进度对话框。类是活动组,因为它嵌套在选项卡栏中。要使视图保持在框架内,需要活动组。下面是我的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());

07-27 14:07