Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:AsyncTask ProgressDialog将不会在ActivityGroup中打开_Android_Android Asynctask_Progressdialog_Activitygroup - Fatal编程技术网

Android:AsyncTask ProgressDialog将不会在ActivityGroup中打开

Android:AsyncTask ProgressDialog将不会在ActivityGroup中打开,android,android-asynctask,progressdialog,activitygroup,Android,Android Asynctask,Progressdialog,Activitygroup,我试图在轮询服务器时打开一个进度对话框。该类是ActivityGroup,因为它嵌套在选项卡栏中。要使视图保持在框架内,需要ActivityGroup。以下是我的ActivityGroup类的声明: public class CheckInActivity extends ActivityGroup{ ... public void onCreate(Bundle savedInstanceState){ super.onCreate(sav

我试图在轮询服务器时打开一个进度对话框。该类是ActivityGroup,因为它嵌套在选项卡栏中。要使视图保持在框架内,需要ActivityGroup。以下是我的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();
        }
私有类LocationControl扩展了异步任务
{
private final ProgressDialog dialog=新建ProgressDialog(选中Inactive.this);
受保护的void onPreExecute()
{
this.dialog.setMessage(“确定您的位置…”);
this.dialog.show();
}
当我运行给定的应用程序时,它遇到了一个与WindowManager$BadTokenException相关的错误。声明它无法使用未知的令牌启动窗口。我尝试制作一个示例应用程序,它只是一个常规活动(而非ActivityGroup),并且工作正常


是否有人知道如何修改此项以使其正常工作,或者知道如何在选项卡栏中嵌套进度条的变通方法?非常感谢您的帮助。

如果ActivityGroup位于选项卡Activity中,则您有两个以上级别的嵌套活动。Android目前不支持此项,但有变通方法。Y您必须将父活动传递给对话框

在activity类中为此目的创建帮助器方法:

private Context getDialogContext() {
    Context context;
    if (getParent() != null) context = getParent();
    else context = this;
    return context;
}
然后换行

private final ProgressDialog dialog = new ProgressDialog(CheckInActivity.this);

如果getParent()不适用于您,请尝试仅使用
TabsActivity.context
(或替换父选项卡活动类的名称)。我使用的是嵌套活动,因此使用的是getParent()仍然没有为对话框返回正确的上下文,因为它需要扩展TabsActivity的活动的上下文,而不是直接父级

简单修复:

  • 您需要在TabsActivity类中创建一个上下文变量。类似于onCreate方法中的
    公共静态TabsActivity context;
    context=this

  • 替换创建对话框的此行:

    AlertDialog.Builder=新建AlertDialog.Builder(此);

  • 与:


    它就像一个符咒。

    这里很简单,您也可以使用以下命令

    private final ProgressDialog dialog = new ProgressDialog(getParent());
    
    这对我来说非常有效

    AlertDialog.Builder builder = new AlertDialog.Builder(TabsActivity.context); 
    
    private final ProgressDialog dialog = new ProgressDialog(getParent());