Java 我希望Android progress对话框一直显示在屏幕上,直到新活动的功能完成,但不会';行不通

Java 我希望Android progress对话框一直显示在屏幕上,直到新活动的功能完成,但不会';行不通,java,android,xml,android-intent,android-activity,Java,Android,Xml,Android Intent,Android Activity,在我的Android应用程序中,一个表单有一个按钮,点击按钮就会打开另一个表单;新表单执行的活动可能需要一些时间。我希望第一个表单保持打开状态,在这些活动完成时,进度对话框继续旋转 我在下面尝试过,但它就是不起作用。“进度”对话框刚刚完成并打开下一个窗口(在新表单上描述的活动完成之前) 在下面的代码表中- 子例程“计算”需要一段时间才能完成 代码: main活动: final ProgressDialog ringProgressDialog = new ProgressDialog(

在我的Android应用程序中,一个表单有一个按钮,点击按钮就会打开另一个表单;新表单执行的活动可能需要一些时间。我希望第一个表单保持打开状态,在这些活动完成时,进度对话框继续旋转

我在下面尝试过,但它就是不起作用。“进度”对话框刚刚完成并打开下一个窗口(在新表单上描述的活动完成之前)

在下面的代码表中-

子例程“计算”需要一段时间才能完成

代码:

main活动:

final ProgressDialog ringProgressDialog = new ProgressDialog(
            MainActivity.this);
    ringProgressDialog.setTitle("Loading");
    ringProgressDialog.show();
    ringProgressDialog.setCancelable(false);
    new Thread(new Runnable() {

    @Override
    public void run() {
        try {

            runOnUiThread(new Runnable() {

                @Override
                public void run() {

                        Intent intent = new Intent(
                                getApplicationContext(),
                                SecondForm.class);
                        startActivity(intent);


                }
            });
        } catch (Exception e) {

        }
        ringProgressDialog.dismiss();

    }
}).start();
 public class CategoryTabs extends Fragment {

        static Context mContext;
        View rootView;

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
                gotstatdata = false;
            rootView = inflater.inflate(R.layout.fragment_abc, container, false);

            mContext = rootView.getContext();

            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        ((Activity) mContext).runOnUiThread(new Runnable() {

                            @Override
                            public void run() {
                                gotstatdata = false;
                                Calculations(128);
                                gotstatdata = true;
                            }
                        });
                    } catch (Exception e) {
                    }
                }
            }).start();
第二种形式:

final ProgressDialog ringProgressDialog = new ProgressDialog(
            MainActivity.this);
    ringProgressDialog.setTitle("Loading");
    ringProgressDialog.show();
    ringProgressDialog.setCancelable(false);
    new Thread(new Runnable() {

    @Override
    public void run() {
        try {

            runOnUiThread(new Runnable() {

                @Override
                public void run() {

                        Intent intent = new Intent(
                                getApplicationContext(),
                                SecondForm.class);
                        startActivity(intent);


                }
            });
        } catch (Exception e) {

        }
        ringProgressDialog.dismiss();

    }
}).start();
 public class CategoryTabs extends Fragment {

        static Context mContext;
        View rootView;

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
                gotstatdata = false;
            rootView = inflater.inflate(R.layout.fragment_abc, container, false);

            mContext = rootView.getContext();

            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        ((Activity) mContext).runOnUiThread(new Runnable() {

                            @Override
                            public void run() {
                                gotstatdata = false;
                                Calculations(128);
                                gotstatdata = true;
                            }
                        });
                    } catch (Exception e) {
                    }
                }
            }).start();

当对话框与
ringProgressDialog.dismise()一起运行时,您将立即关闭对话框。
应该删除该行,并在完成时执行类似发送广播的操作,以关闭“进度”对话框

看起来您可能还需要一个后台线程,而不是第二个
活动
,因为不需要用户交互

查看将是从后台线程开始的最简单的方法,它的“onPostExecute”方法将允许您关闭对话框

编辑

您想要的基本结构是添加以下内容

new AsyncTask<Void, Void, Void>() {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            //TODO: show your dialog from here
        }

        @Override
        protected Void doInBackground(Void... params) {
            //TODO: call Calculations(128); from here
            //Calculations(128); should live within this async task instead of a new activity
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            //TODO: call dismiss on your dialog from here
        }
    }.execute();
newasynctask(){
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//TODO:从此处显示您的对话框
}
@凌驾
受保护的Void doInBackground(Void…参数){
//TODO:呼叫计算(128);从这里开始
//计算(128);应位于此异步任务中,而不是新活动中
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
//TODO:从此处调用对话框中的Disclose
}
}.execute();

而不是
新线程(new Runnable(){
您当前拥有的块

执行需要一段时间的代码在哪里?是启动第二个活动并显示进度对话框直到计算方法完成,还是可以将调用的计算方法移动到第一个活动,以便在计算方法完成之前不显示第二个活动使用
AsyncTask
?我认为它非常适合您的需要。我以前从未使用过它,请您展示一个代码示例好吗?我可以看出上面的内容对于在同一表单上进行的活动是有意义的。但是在我上面的代码中,这些活动是在另一个表单上进行的,而不是在创建ProgressDialogs的表单上进行的启动另一个“窗体”,该窗体似乎是您正在调用的活动,则无法显示上一个活动中的UI,包括对话框。您想要的是在后台执行某些操作,这正是asynctask允许您执行的操作