如果我有一些函数调用,需要一些时间来执行并返回按钮的onclick监听器内部,onclick监听器的第一行只在函数调用执行完成后执行。
例如:
在这里,我只能在函数somefunction()
完成执行后才能看到吐司。
shareButton.setOnClickListener(new View.OnClickListener() {
//@Override
public void onClick(View v) {
Toast.makeText(con,"hi",Toast.LENGTH_SHORT).show();
somefunction()//takes sometime to execute and return
}
}
答案 0 :(得分:0)
发生这种情况的原因是,当您在show()
上调用Toast
时(这适用于大多数UI更新),应用程序将视图更新置于主线程的末尾&#39 ; s执行队列。要实现您的目标,请按以下方式在队列末尾发布someFunction()
。
public void onClick(View v) {
Toast.makeText(con, "hi", Toast.LENGTH_SHORT).show();
new Handler().post(new Runnable() {
public void run() {
somefunction();
}
});
}
当然,如果someFunction()
导致UI延迟甚至略微明显,建议您在单独的线程上运行它。