Как использовать обработчик для обновления моей основной активности? - PullRequest
0 голосов
/ 08 февраля 2012

Я новичок в Java / Android и пытаюсь расширить свои знания, делая простую игру.Вы, наверное, когда-либо слышали о Genius.

Хорошо, вот мой основной код активности:

package br.genius;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class GeniusActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final Button b1 = (Button) findViewById(R.id.button1);
        final Button b2 = (Button) findViewById(R.id.button2);
        final Button b3 = (Button) findViewById(R.id.button3);
        final Button b4 = (Button) findViewById(R.id.button4);

        Button start = (Button) findViewById(R.id.button5);
        start.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                Principal p = new Principal(b1,b2,b3,b4);
            }
        });



    }

    public static void vermelho(int i, ArrayList<Button> alb) {
        alb.get(i).setBackgroundColor(-65536);
    }

}

и вот мой класс, расширяющий тему:

package br.genius;

import java.util.ArrayList;
import java.util.Random;
import android.widget.Button;

public class Principal extends Thread implements Runnable{


    private ArrayList<Button> alb = new ArrayList<Button>();
    private Button b1,b2,b3,b4;
    private Thread tt;

    public Principal(Button b1,Button b2,Button b3,Button b4) {
        this.b1 = b1;
        this.b2 = b2;
        this.b3 = b3;
        this.b4 = b4;
        tt = new Thread(this);
        tt.start();

        //this.run();
    }

    public void run() {

        int ve[] = iniciaSequencia();

        for (int i = 0; i < 4; i++) {
            switch (ve[i]) {

            case 1:
                alb.add(i, b1);
                break;
            case 2:
                alb.add(i, b2);
                break;
            case 3:
                alb.add(i, b3);
                break;
            case 4:
                alb.add(i, b4);
                break;
            }

        }
        for (int i = 0; i < 4; i++) {
            GeniusActivity.vermelho(i,alb);
            try {
                tt.wait(1500);
            }
            catch(InterruptedException e) {

            }
            //alb.get(i).setBackgroundColor(-7829368);
        } 

         /*rr = new Runnable(){
            public void run(){

                for (int i = 0; i < 4; i++) {
                    vermelho(i);
                    //atrasador();
                    //alb.get(i).setBackgroundColor(-7829368); //
                }
            }
        };*/


    }

    public int[] iniciaSequencia() {
        int v[] = new int[4];
        Random r = new Random();
        for (int i = 0; i < 4; i++) {
            v[i] = r.nextInt(4) + 1;

        }
        return v;
    }


}

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

Спасибо, Лев

1 Ответ

0 голосов
/ 08 февраля 2012

Создайте обработчик в вашей GeniusActivity, а в методе onClick используйте его метод «post». Этот метод ожидает объект Runnable в параметре, поэтому этот Runnable должен определять, что ожидается при нажатии.

...