您好,并提前感谢您提出以下问题的建议。我有一个显示AlertDialog的简单Activity。如果我在构造函数中实例化AlertDialog,它工作正常。但是,如果我将AlertDialog移动到另一个方法,一个由Timer事件触发的方法,没有任何反应,我看到没有错误:
public class RecipesPage extends Activity
{
private WebView browser;
private Timer timer = new Timer();
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.recipes);
browser = (WebView)findViewById(R.id.webkit);
browser.getSettings().setJavaScriptEnabled(true);
browser.loadUrl("file:///android_asset/html/index.html");
TimerTask task=new TimerTask() {
public void run() {
notifyMe();
}
};
timer.schedule(task, 10000);
}
private void notifyMe()
{
new AlertDialog.Builder(this)
.setTitle("MessageDemo")
.setMessage("eek!")
.setNeutralButton("Close", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dlg, int sumthin) {
// do nothing -- it will close on its own
}
})
.show();
}
}
答案 0 :(得分:1)
使用Handler
代替TimerTask
- 它将在UI线程上运行您的Runnable
。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recipes);
browser = (WebView)findViewById(R.id.webkit);
browser.getSettings().setJavaScriptEnabled(true);
browser.loadUrl("file:///android_asset/html/index.html");
Handler handler = new Handler();
handler.postDelayed(
new Runnable() {
public void run() {
notifyMe();
}
}, 10000L);
}