Java Android-进度操作对话框退出
我正试着为我的手机编写一个非常基本的应用程序,只是为了让自己回到编程的轨道上来。我已经有了我想要做的框架和基本知识,我只需要在一个小部分上得到帮助,这让我很痛苦 在我的应用程序上,我有一个按钮。当按下该按钮时,我希望应用程序将一段文本更改为“Decision…”,弹出一个不确定的进度条一两秒钟,然后退出,然后打印另一个活动的结果,但只有在对话框退出后。我现在正在使用一个线程,但是我不能让它正常工作 有人知道如何让它以我想要的方式工作吗 以下是我的活动文件源:Java Android-进度操作对话框退出,java,android,progressdialog,Java,Android,Progressdialog,我正试着为我的手机编写一个非常基本的应用程序,只是为了让自己回到编程的轨道上来。我已经有了我想要做的框架和基本知识,我只需要在一个小部分上得到帮助,这让我很痛苦 在我的应用程序上,我有一个按钮。当按下该按钮时,我希望应用程序将一段文本更改为“Decision…”,弹出一个不确定的进度条一两秒钟,然后退出,然后打印另一个活动的结果,但只有在对话框退出后。我现在正在使用一个线程,但是我不能让它正常工作 有人知道如何让它以我想要的方式工作吗 以下是我的活动文件源: package com.bassio
package com.bassios.decisionengine;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class DecisionEngineActivity extends Activity {
private ProgressDialog progressDialog;
public String decision;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void decide(View view) {
TextView tv = (TextView) findViewById(R.id.Decision1);
tv.setText("Deciding...");
int a = generate();
decision = decision(a);
runDialog(1);
// alterText();
}
public void alterText() {
TextView tv = (TextView) findViewById(R.id.Decision1);
tv.setText(decision);
}
private void runDialog(final int seconds) {
progressDialog = ProgressDialog.show(this, "Please wait...", "Deciding...");
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(seconds * 1000);
progressDialog.dismiss();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
public static int generate() {
int a = (int) (Math.random() * 10) + 1;
return a;
}
public static String decision(int a) {
String decision = null;
switch (a) {
case 1:
decision = "Yes";
break;
case 2:
decision = "No";
break;
case 3:
decision = "Yes";
break;
case 4:
decision = "No";
break;
case 5:
decision = "Yes";
break;
case 6:
decision = "No";
break;
case 7:
decision = "Yes";
break;
case 8:
decision = "No";
break;
case 9:
decision = "Yes";
break;
case 10:
decision = "No";
break;
}
return decision;
}
}
谢谢 使用异步任务
例如:
更新:
首先,必须像这样声明类:
private class DecideTask extends AsyncTask<Void, Void, Boolean>
{
...
}
删除/取消对话框(在onPostExecute
中):
声明三种方法中的每一种:
protected Boolean doInBackground(Void... params)
protected void onPreExecute()
protected void onPostExecute(Boolean result)
应该可以了。使用AsyncTask
例如:
更新:
首先,必须像这样声明类:
private class DecideTask extends AsyncTask<Void, Void, Boolean>
{
...
}
删除/取消对话框(在onPostExecute
中):
声明三种方法中的每一种:
protected Boolean doInBackground(Void... params)
protected void onPreExecute()
protected void onPostExecute(Boolean result)
应该可以。尝试使用
AsyncTask
而不是Thread
,您无法从另一个线程更改UI的状态
尝试使用AsyncTask
而不是Thread
,您无法从另一个线程更改UI的状态
,我正在尝试使用该示例,但当我粘贴它以使其适合时,我得到了这样的结果:com.bassios.decisionengine.decisionengineacitivity.decisiontask不是抽象的,也不会覆盖抽象方法doInBackground(java.lang.Object…)在android.os.asynctask中,我把它放在了PasteBin上,因为它太长了,无法放在这里的注释中:如果不取消doInBackground方法上方的重写注释,会发生什么呢?不管怎样,我仍然会得到相同的错误。取消对@Override的注释会给我“方法不会重写或实现超类型中的方法”的回复太晚了,我昨天出去了。我已经让它的大部分工作了,但对话框不工作。我在progressDialog=progressDialog.show(…)上收到一条巨大的错误消息;现在排队。我已经上传了错误信息作为你的截图,它太大了,无法打印出来。编辑:我应该提到,我正在使用NetBeans开发,因为Eclipse无法工作(它找不到我的jvm)。我不知道这是否有什么区别。我试图使用这个例子,但当我粘贴它以使其适合时,我得到了这样的结果:com.bassios.decisionengine.DecisionEngineActivity.decisiontask不是抽象的,也不会覆盖抽象方法doInBackground(java.lang.Object…)在android.os.asynctask中,我把它放在了PasteBin上,因为它太长了,无法放在这里的注释中:如果不取消doInBackground方法上方的重写注释,会发生什么呢?不管怎样,我仍然会得到相同的错误。取消对@Override的注释会给我“方法不会重写或实现超类型中的方法”的回复太晚了,我昨天出去了。我已经让它的大部分工作了,但对话框不工作。我在progressDialog=progressDialog.show(…)上收到一条巨大的错误消息;现在排队。我已经上传了错误信息作为你的截图,它太大了,无法打印出来。编辑:我应该提到,我正在使用NetBeans开发,因为Eclipse无法工作(它找不到我的jvm)。我不知道这是否有什么区别。