1

在我的应用程序中,我有一个或多或少可以持续 2 到 15 秒的程序。我想要的是设置一种吐司,当程序开始时显示:

Loading values. Wait...

刚才,我已经将 toast 的持续时间设置为 SHORT,因为如果该过程持续大约 5 秒或更短的时间,那么 LONG 就是这样,非常长。但是将持续时间设置为 SHORT 后,当持续时间超过 10 秒时,toast 就会消失,并且没有消息显示应用程序仍在处理,因此用户可以开始触摸事物。

我想要的是设置像烤面包这样的东西,但我可以在程序完成时以编程方式取消。有任何想法吗?

4

5 回答 5

4

我建议您只需将 Toast 持续时间设置为最大可能时间,然后在您的流程完成时使用从 Toast.makeText(...) 返回的 Toast 对象取消它。

Toast t = Toast.makeText(....., YERY_LONG_TOAST_TIME);
t.show();

public void onYourTaskFinished() {
    t.cancel();
}

类似的东西。我个人建议使用ProgressDialog顺便说一句:http: //developer.android.com/reference/android/app/ProgressDialog.html

于 2013-09-17T08:11:36.407 回答
1

这是一个例子:

final Toast toast = Toast.makeText(ctx, "This message will disappear in 1 second", Toast.LENGTH_SHORT);
toast.show();

Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
       @Override
       public void run() {
           toast.cancel(); 
       }
}, 1000); //specify delay here that is shorter than Toast.LENGTH_SHORT
于 2013-09-17T08:09:42.963 回答
0
final Toast toast = Toast.makeText(ctx, "hello android", Toast.LENGTH_SHORT);

Handler h= new Handler();
    h.postDelayed(new Runnable() {
       @Override
       public void run() {
           toast.show(); 
       }
}, 1000); 



    h.postDelayed(new Runnable() {
       @Override
       public void run() {
           toast.cancel(); 
       }
}, 3000); 
于 2013-09-17T08:39:10.137 回答
0

您可以在创建 Toast 时拥有一个处理程序,将其传递给您的作业,并在作业开始时调用 show() 方法,并在作业完成时调用 cancel() 方法。

但是,根据您的描述,toast message 可能不是您的最佳选择。Toast 更像是一个提示,如果用户错过它,它几乎没有影响。由于有关您的应用程序的背景信息很少,我认为如果您不希望用户在加载数据时触摸任何东西,您可能需要一个ProgressDialog ,如果您只想让用户知道您的工作进度,则可能需要一个 ProgressBar。

于 2013-09-17T08:39:36.567 回答
-1

不要为此目的使用 Toast。您应该使用进度对话框,或者您可以将进度指示器添加到通知栏。因此,即使不在您的应用程序中,用户也可以看到进度。

于 2013-09-17T09:04:04.123 回答