2012-02-08 52 views
0

我是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; 
    } 


} 

我得到一个名为$ CalledFromWrongThreadException错误:只有原来的线程创建一个视图层次结构可以触及其视图。

感谢, 利奥

回答

0

在GeniusActivity创建一个处理程序,并在onclick方法,使用它的“后”的方法。此方法需要参数中有一个Runnable对象,因此此Runnable必须定义单击时的预期内容。

+0

你能发表一个这个处理程序/ Runnable的简短例子吗? – 2012-02-08 19:30:35

相关问题