web-dev-qa-db-fra.com

Android: accès à l'élément UI du fil de la minuterie

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

J'ai besoin d'accéder à un groupe de boutons radio sur l'interface utilisateur et de la définir comme vérifié à intervalles réguliers, mais je continue à obtenir des erreurs différentes, j'ai réalisé que je dois utiliser un gestionnaire, mais cela ne fonctionne toujours pas ... peut-on me dire s'il vous plaît dites-moi où Je vais mal, je suis un débutant et j'essaie de comprendre des choses pour mieux travailler ... Aidez-moi s'il vous plaît ...

21
Ajay

Vous n'avez pas besoin d'appeler Runonuthread dans le gestionnaire. En appelant Post sur l'instance de manutention, le passage de votre réussite sera exécuté sur le fil de l'interface utilisateur à un moment donné. Changez votre code pour ressembler à ceci et cela devrait fonctionner:

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

Vous pouvez transmettre l'activité sous forme de paramètre sur la méthode qui exécute le TIMERTASK, puis vous pouvez utiliser Activity.RunonUthread pour exécuter vos tâches dans le fil d'interface utilisateur. Il y a beaucoup de post dans Stackoverflow Site concernant l'utilisation de l'utilisation de RunonUthread.

0
Navine