Android:AsyncTask ProgressDialog不会在ActivityGroup中打开

mbs*_*eid 14 android progressdialog activitygroup android-asynctask

我正在尝试在轮询我的服务器时打开一个进度对话框.该类是一个ActivityGroup,因为它嵌套在选项卡栏中.要在框架内保持视图,需要ActivityGroup.这是我的ActivityGroup类的声明:

   public class CheckInActivity extends ActivityGroup{
        ...
        public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.checkin);
            new LocationControl().execute(this);
Run Code Online (Sandbox Code Playgroud)

现在我的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();
        }
Run Code Online (Sandbox Code Playgroud)

当我运行给定的应用程序时,它通过与WindowManager $ BadTokenException相关的错误.说明它无法使用未知令牌启动窗口.我尝试制作一个只是常规Activity(而不是ActivityGroup)的示例应用程序,它运行得很好.

有没有人知道如何修改它以使其工作,或解决方法将允许进度条嵌套在选项卡栏中?任何帮助是极大的赞赏.

Tom*_*Tom 22

如果ActivityGroup在TabActivity中,则嵌套活动具有多于两个级别.Android目前不支持此功能,但有一种解决方法.您必须将父活动传递给对话框.

在activity类中为此创建一个帮助方法:

private Context getDialogContext() {
    Context context;
    if (getParent() != null) context = getParent();
    else context = this;
    return context;
}
Run Code Online (Sandbox Code Playgroud)

然后改变这条线

private final ProgressDialog dialog = new ProgressDialog(CheckInActivity.this);
Run Code Online (Sandbox Code Playgroud)

private final ProgressDialog dialog = new ProgressDialog(getDialogContext());
Run Code Online (Sandbox Code Playgroud)