如何在对话框消息关闭之前暂停其他指令。

3

你好,我有一个关于AlertDialog / Toast的问题。 当用户点击按钮时,只需显示一条信息 “你是正确的”1秒钟。当我使用toast/alertdialog实现这个功能时,它会执行此操作,但在对话框关闭之前就开始执行onclick方法中的下一条指令。我该如何解决这个问题?


这是一个很棒的问题,因为我自己也注意到了这一点。你会认为Android会“等待”响应,但实际上你的程序会继续执行,即使它正在等待响应。 - Jack
暂停线程一段时间,直到对话框关闭。 - Nikola Despotoski
1
将UI线程休眠会导致用户单击时无响应。 - Jack
3个回答

2

使用Handler对象的方法如下:

public class ToastActivity extends Activity{

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main); 
    Handler mHandler = new Handler();
    for(int i=10;i>=1;i--)
    {
        Toast.makeText(this, ""+i, Toast.LENGTH_SHORT).show();
    }
    mHandler.postDelayed(new Runnable(){public void run(){
    LinearLayout t=(LinearLayout)findViewById(R.id.l);   //This task is delayed by 21 sec.
            t.setBackgroundColor(Color.CYAN);
        }
    }, 21000);           
}

在 Toast 消失后,其后的语句将被执行。


因为长度短的提示信息只会显示2秒钟,所以最小等待时间必须约为20000毫秒,因此等待21000毫秒虽然是硬编码,但却是正确的做法。 - Rolf ツ

1

如果您正在使用Toast,请使用Handler将任务推迟到Toast显示的时间。

当使用对话框时,请为“确定”按钮实现onClickListener


对于对话框,因为它会暂停直到用户点击,所以不会有任何问题。但是对于 Toast 来说,它只是显示一条消息,不会等待任何东西,因此会继续执行下一条指令,这是不可取的。使用线程来暂停会导致在对话框之后变得无响应。那么使用 Handler 有什么不同呢?您能用代码片段解释一下吗?请返回翻译后的文本。 - Nikhil

0
我所需要做的是将AlertDialog之后的任何代码放入相应的监听器中。例如,如果您在警报对话框之后有一堆代码,只想根据某些响应执行该代码,请将该代码移动到另一个方法中。然后,在positiveButton监听器(或negative button监听器)中添加对刚刚创建的相应方法的调用。或者您可以将所有内容都塞进监听器中,但这会使代码难以管理。

没有回应。对话框应该出现并在执行其他语句之前消失,而不是等待任何响应。 - Nikhil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接