Android: доступ к элементам пользовательского интерфейса из потока

1
public Button stb;
static int cnt=0;
public ArrayList<RadioButton> Butgrp1 = new ArrayList<RadioButton>();
Timer myt;
TimerTask t;

stb.setOnClickListener (новый OnClickListener() {

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);

Мне нужно получить доступ к группе переключателей на ui и установить их как проверенные через регулярные промежутки времени, но я продолжаю получать разные ошибки, я понял, что должен использовать обработчик, но он все еще не работает... может кто-нибудь скажет мне, где я ошибаюсь.... я новичок и пробовал вещи, чтобы лучше понять работу... пожалуйста, помогите...

  • 0
    Может кто-нибудь, пожалуйста, проверьте это?
  • 1
    какой тип ошибки?
Теги:
handler
android-widget
timertask

2 ответа

1

Вы можете попытаться использовать свой собственный обработчик вместо таймера и таймеров.

RefreshHandler mHandler = new RefreshHandler();

С:

class RefreshHandler extends Handler
{
    @Override
    public void handleMessage(Message msg) 
    {
        postYourElements();
    }

    public void sleep(long delayMillis) 
    {
      this.removeMessages(0);
      sendMessageDelayed(obtainMessage(0), delayMillis);
    }
 }

И чем использовать функцию:

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);
}

Чтобы запустить обработчик, просто вызовите postYourElements() в postYourElements().

Я не уверен, что это работает для вас, но вы можете попробовать.

0
youractivityname.this.runOnUiThread(new Runnable() {
                    public void run() {
                         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);
                    }
                });

Ещё вопросы

Сообщество Overcoder
Наверх
Меню