2012-07-18 56 views
1

我正在做一个安卓游戏。我使用的是RelativeLayout,它承载一个FrameLayout,它承载一个SurfaceView。不过,我在RelativeLayout上添加了一个textview来显示玩家剩下的健康点数。我有一种方法可以设置他留在文本视图中的健康点数的整数值。 int值位于另一个类的SurfaceView中。但textview和更新textview的方法在另一个类中。我想让其他课程中的方法不断更新,以便textview始终显示健康值。我怎样才能做到这一点?该方法称为updateHealthPointsTextView()。请帮助我,非常感谢!我的代码:循环安卓方法

package com.mysoftwaremobileapps.alien.attack; 

import java.util.ArrayList; 

public class GameScreenActivity extends Activity { 
/** Called when the activity is first created. */ 
List<String> myList = new ArrayList<String>(); 
RadioButton radioEasy, radioMedium, radioHard; 
private ExampleView eView; 
public int ParachuterIndex; 
TextView healthPoints; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    dropParachuters(); 
} 
private void dropParachuters() { 
    // TODO Auto-generated method stub 
} 
    @Override 
    protected void onStart() 
    { 
     FrameLayout fl = new FrameLayout(this); 
     eView = new ExampleView(this); 
     fl.addView(eView); 

     healthPoints = new TextView(this); 
     healthPoints.setText("Health Points: " + eView.getThread().healthPoints); 

     RelativeLayout relativeLayout= new RelativeLayout(this); 
     relativeLayout.addView(fl); 
     relativeLayout.addView(healthPoints); 
     setContentView(relativeLayout); 

     eView.getThread().drawAlien(); 
     eView.getThread().drawAlien(); 
     eView.getThread().drawAlien(); 
     eView.getThread().drawAlien(); 
     eView.getThread().drawAlien(); 
     eView.getThread().drawAlien(); 
     eView.getThread().drawAlien(); 
     eView.getThread().drawAlien(); 
     eView.getThread().drawAlien(); 
     eView.getThread().drawAlien(); 
     eView.getThread().publicFloatX = 750; 

     eView.getThread().gettingAttacked(); 

     updateHealthPointsTextView(); 

     super.onStart(); 

     try { 
      Bundle extras = getIntent().getExtras(); 
      if (extras != null) { 
       String value = extras.getString("KEY"); 
      } 
     } catch (Exception e) { 
      // TODO: handle exception 
     } 

} 

    private void updateHealthPointsTextView() { 
     // TODO Auto-generated method stub 
        //Updating textview with health points value 
      healthPoints.setText(Integer.toString(eView.getThread().healthPoints)); 
     } 
    } 
    @Override 
    public boolean onKeyDown(int KeyCode, KeyEvent Event) { 
     if ((KeyCode == KeyEvent.KEYCODE_MENU)) { 
      //Call performSpecialAttack() 
      Log.d("Parachute Hunter", "calling performSpecialAttack()"); 
      eView.getThread().performSpecialAttack(); 
      return true; 
     } 
     return super.onKeyDown(KeyCode, Event); 
    } 


@Override 
protected void onStop() 
{ 
    try { 
     eView.getThread().setRunning(false); 
     eView = null; 
    } 
    catch (NullPointerException e) {} 

    super.onStop(); 
} 
} 
+0

刚刚通过的TextView的引用在类的构造函数和使用处理程序来更新频繁 – 2012-07-18 11:29:59

回答

0

如何有这样的方法:

public void setHealthPoints(int points) { 
     eView.getThread().healthPoints = points; 
     //Updating textview with health points value 
     healthPoints.setText("Health Points: " + Integer.toString(points)); 
    } 
} 

调用它无处不在,它不应该阻止GUI线程

0

只是通过TextView中的构造函数的引用并且使用处理程序来频繁更新它。

public final class MethodUtil { 
TextView mTextView; 

public MethodUtil(TextView mTextView) { 
//this.mTextView =(TextView)mTextView.findViewById(R.id.textview); 
    this.mTextView=mTextView; 
} 
public void updateHealthPointsTextView(){ 
mTextView.post(new Runnable() { 

    @Override 
    public void run() { 
     mTextView.setText("Health Points: " +  eView.getThread().healthPoints); 

    } 
}); 
} 
} 
+0

你能只需要输入我的新的输入?我不明白这一点。我应该怎么称呼?如果我只是输入到我的代码它什么也没有 – user1446632 2012-07-18 14:47:22

+0

我想你是更新从其他线程或类的文本视图或从其他线程更新UI你需要处理程序,我已经实现,我用构造函数来传递视图以便您还可以更新该类的测试视图 – 2012-07-19 09:40:39

0

我通过简单地让倒数计时器从1秒倒计时,然后重新启动自己并在完成时更新textview来修复它。它的工作原理

 public void updateHealthPointsTextView() { 
     //The aliens are firing and throwing rocks, make the defender lose health 
     new CountDownTimer(1000, 1000) { 

      public void onTick(long millisUntilFinished) { 
      } 

      public void onFinish() { 
       //Updating textview 
       healthPoints.setText("Health points: " + Integer.toString(eView.getThread().healthPoints)); 
       updateHealthPointsTextView(); 
      } 
      }.start(); 
    }