我有一个小型Android应用程序,可在5秒后自动点击按钮。我使用过performClick();
但这不起作用。当计时器变为零时,它只会崩溃。
这是我的代码:
protected void onCreate(Bundle savedInstanceState) {
try {
super.onCreate(savedInstanceState);
setContentView(R.layout.local);
getActionBar().setIcon(R.drawable.menu_drop);
buttonClick();
Thread timer = new Thread(){
public void run(){
try{
sleep(5000);
} catch (InterruptedException e){
e.printStackTrace();
}finally{
button1.performClick();
}
}
};
timer.start();
} catch (NotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void buttonClick() {
button1 = (Button) findViewById(R.id.button);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(TestButton2.this, LocationView.class);
startActivity(i);
}
});
}
答案 0 :(得分:6)
您应该发布包含错误消息的logcat,但有一个问题可能是您正在访问UI线程中的UI元素,这不是一个好主意。
要做你想做的事,你真的不需要另一个线程。您可以使用Handler
和延迟Runnable
,如下所示。
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
button1.performClick();
}
}, 5000);
这将安排在5秒后在UI线程上执行Runnable
。如果仍然崩溃,则从logcat发布堆栈跟踪。
答案 1 :(得分:0)
使用runOnUiThread()
方法。此方法运行UI线程的方法
答案 2 :(得分:-1)
protected void onCreate(Bundle savedInstanceState) {
try {
super.onCreate(savedInstanceState);
setContentView(R.layout.local);
getActionBar().setIcon(R.drawable.menu_drop);
//buttonClick();
Thread timer = new Thread(){
public void run(){
try{
sleep(5000);
} catch (InterruptedException e){
e.printStackTrace();
}finally{
//button1.performClick();
getLocationOnClick();
}
}
};
timer.start();
} catch (NotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
将按钮单击方法更改为这样 -
public void getLocationOnClick(View v) {
Intent i = new Intent(TestButton2.this, LocationView.class);
startActivity(i);
}
在Button的xml中添加onClick属性 -
<Button
android:id="@+id/btnid"
android:onClick="getLocationOnClick"
.... >