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