【问题标题】:Android - Action on progress dialog exitAndroid - 进度对话框退出操作
【发布时间】:2011-11-02 12:36:31
【问题描述】:

我正在尝试为我的手机编写一个非常基本的应用程序,只是为了让自己重新回到编程的浪潮中。我已经有了我想做的框架和基础知识,我只需要在一小部分让我死去的帮助。

在我的应用程序上,我有一个按钮。当按下该按钮时,我希望应用程序将一段文本更改为“决定...”,弹出一个不确定的进度条一两秒钟然后退出,然后打印另一个活动的结果,但仅在对话框之后已退出。我目前正在使用一个线程,但我无法让它正常运行。

有人知道如何让它按照我想要的方式工作吗?

这是我的 Activity 文件来源:

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;
    }
}

谢谢!

【问题讨论】:

  • 尝试使用AsyncTask而不是Thread,您无法从另一个Thread更改UI的状态

标签: java android progressdialog


【解决方案1】:

使用 AsyncTask。

一个例子:

http://javatech.org/2011/02/discovering-android-opening-a-progress-dialog-with-asynctask/

更新:

首先,你必须像这样声明类:

private class DecideTask extends AsyncTask<Void, Void, Boolean>
{
...
}

我不知道 showDialogremoveDialog 是如何工作的,但我会这样做:

显示对话框(onPreExecute):

progressDialog = ProgressDialog.show(this, "Please wait...",
                "Deciding...", true);

删除/关闭对话框(在onPostExecute):

progressDialog.dismiss();

分别声明三个方法:

protected Boolean doInBackground(Void... params)

protected void onPreExecute()

protected void onPostExecute(Boolean result)

应该可以的。

【讨论】:

  • 我正在尝试使用该示例,但是当我将其粘贴以更改它以适应时,我得到了这个:com.bassios.decisionengine.DecisionEngineActivity.decideTask 不是抽象的并且不会覆盖抽象android.os.AsyncTask 中的方法 doInBackground(java.lang.Object...)
  • 我已经把它放在 PasteBin 上,因为它太长了,无法放入这里的 cmets:pastebin.com/2BpZssjV
  • 如果不取消注释 doInBackground 方法上方的覆盖会怎样?
  • 无论哪种方式我仍然得到同样的错误。取消注释 @Override 会给我“方法不会覆盖或实现超类型的方法”
  • 抱歉回复晚了,我昨天出去了。我现在大部分都在工作,但对话框不工作。我在 progressDialog = ProgressDialog.show(...); 上收到一条巨大的错误消息现在行。我已将错误消息作为屏幕截图上传给您,它太大而无法输入。 i42.tinypic.com/2evxjj7.jpg 编辑:我可能应该提到我正在使用 NetBeans 进行开发,因为 Eclipse 无法工作(它找不到我的 jvm)。我不知道这是否有什么不同。
猜你喜欢
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多