Android:从线程访问ui元素
我需要访问ui上的一组单选按钮,并定期将其设置为选中,但我不断收到不同的错误,我意识到我必须使用处理程序,但它仍然不起作用…有人能告诉我哪里出了问题吗…我是一个新手,正在尝试更好地理解工作原理的东西…请帮助…您可以尝试使用自己的处理器,而不是计时器和定时TakAndroid:从线程访问ui元素,android,android-widget,handler,timertask,Android,Android Widget,Handler,Timertask,我需要访问ui上的一组单选按钮,并定期将其设置为选中,但我不断收到不同的错误,我意识到我必须使用处理程序,但它仍然不起作用…有人能告诉我哪里出了问题吗…我是一个新手,正在尝试更好地理解工作原理的东西…请帮助…您可以尝试使用自己的处理器,而不是计时器和定时Tak public void onClick(View v) { myt.schedule(new TimerTask() { @Override public void run() {
public void onClick(View v) {
myt.schedule(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);
与:
然后使用该功能:
class RefreshHandler extends Handler
{
@Override
public void handleMessage(Message msg)
{
postYourElements();
}
public void sleep(long delayMillis)
{
this.removeMessages(0);
sendMessageDelayed(obtainMessage(0), delayMillis);
}
}
要启动处理程序,只需调用onClick方法下的postYourElements()
函数
我不确定这是否适用于您,但您可以尝试。您可以尝试使用自己的处理程序,而不是计时器和定时Tak
public void onClick(View v) {
myt.schedule(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);
private void postYourElements()
{
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);
}
});
mHandler.sleep(TimerIntervallInMs);
}
与:
然后使用该功能:
class RefreshHandler extends Handler
{
@Override
public void handleMessage(Message msg)
{
postYourElements();
}
public void sleep(long delayMillis)
{
this.removeMessages(0);
sendMessageDelayed(obtainMessage(0), delayMillis);
}
}
要启动处理程序,只需调用onClick方法下的postYourElements()
函数
我不确定这是否适合你,但你可以试试
private void postYourElements()
{
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);
}
});
mHandler.sleep(TimerIntervallInMs);
}