public Button stb;
static int cnt=0;
public ArrayList<RadioButton> Butgrp1 = new ArrayList<RadioButton>();
Timer myt;
TimerTask t;
stb.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
myt.mschedule(new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("Entering run");
Handler h=new Handler();
h.post(new Runnable() {
public void run() {
// TODO Auto-generated method stub
runOnUiThread(new Runnable() {
public void run() {
// TODO Auto-generated method stub
Butgrp1.get(cnt).setChecked(true);
cnt=cnt+1;
if(cnt>4)
cnt=0;
if(cnt>0)
// Butgrp1.get(cnt-1).setChecked(false);
System.out.println(cnt);
}
});
}
});
//rg.getChildAt(cnt).setPressed(true);
}
},1000,2000);
我需要访问ui上的一组单选按钮,并将其设置为定期检查,但我不断收到不同的错误,我意识到我必须使用处理程序,但它仍然不working...can任何人请告诉我,我去哪里wrong....am一个新手,并正在尝试的东西,以了解工作的better...please帮助…
发布于 2012-03-16 21:56:15
您必须在UI线程中创建Handler
,即在Activity
的onCreate
中。
因为它是在后台线程的run
方法中创建的,所以处理程序将在同一个后台线程中执行您的代码。
你也可以直接初始化你的Handler
:
public class MyActivity extends Activity{
private Handler handler = new Handler();
//more code
}
然后不要使用runOnUIThread
handler.post(new Runnable() {
public void run() {
// TODO Auto-generated method stub
Butgrp1.get(cnt).setChecked(true);
cnt=cnt+1;
if(cnt>4)
cnt=0;
if(cnt>0)
// Butgrp1.get(cnt-1).setChecked(false);
System.out.println(cnt);
}
});
编辑:好的,试试这段清理过的代码。因为你没有发布你的全部活动,这将不会开箱即用:
public class TestActivity extends Activity {
private Button button;
static int cnt=0;
public ArrayList<RadioButton> buttonArray = new ArrayList<RadioButton>();
private Timer timer = new Timer();
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
timer.schedule(new MyTimerTask(), 1000,2000);
}
});
}
private void doButtonStuff(){
buttonArray.get(cnt).setChecked(true);
cnt=cnt+1;
if(cnt>4){
cnt=0;
}
if(cnt>0){
// Butgrp1.get(cnt-1).setChecked(false);
System.out.println(cnt);
}
}
private class MyTimerTask extends TimerTask{
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
doButtonStuff();
}
});
}
}
}
发布于 2014-09-30 19:51:36
您可以将活动作为参数传递给运行timertask的方法,然后可以使用Activity.runOnUiThread在UI线程中执行任务。在stackoverflow网站上有很多关于runOnUiThread使用情况的帖子。
发布于 2012-03-16 21:53:19
您不需要在处理程序内部调用runOnUIThread。通过在Handler实例上调用post,您传递的runnable将在将来的某个时候在UI线程上执行。将您的代码更改为如下所示,它应该可以工作:
Handler h=new Handler();
h.post(new Runnable() {
public void run() {
// TODO Auto-generated method stub
Butgrp1.get(cnt).setChecked(true);
cnt=cnt+1;
if(cnt>4)
cnt=0;
if(cnt>0)
// Butgrp1.get(cnt-1).setChecked(false);
System.out.println(cnt);
}
});
https://stackoverflow.com/questions/9738239
复制相似问题