2014-03-24 31 views
0

我正在开发一款android游戏。当应用程序启动时显示一个按钮(“开始”)来启动游戏。当用户输了,应用程序应该显示原始视图并将按钮文本更改为“重新启动”。当我启动应用程序时一切正常,但当用户失去时,我得到原始视图(按钮文本没有改变),甚至没有响应按钮。我有两个类:GameActivity和GameView: 在GameActivity我有这样的:按钮不更新其文本

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    init(); 
} 

public void init() { 
    setContentView(R.layout.activity_catch_game); 
    fruitView = (CatchGameView) findViewById(R.id.l3InfoCatchGameView1); 
    fruitView.setActivity(this); 
    if (bStart == null) { //When we launch the app 
     bStart = (Button) findViewById(R.id.start); 

     bStart.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       buttonStartClickEventHandler(); 

      } 

     }); 
    } else{ 
     bStart.setText("Restart"); 
    } 

} 

在GameView我有这样的:

private void showScore() { 
    stopTimer(); 
    AlertDialog.Builder popupBuilder = new AlertDialog.Builder(
      this.getContext()); 
    TextView message = new TextView(this.getContext()); 
    message.setText("Score : " + score); 
    message.setGravity(Gravity.CENTER_HORIZONTAL); 
    popupBuilder.setView(message); 
    popupBuilder.setCancelable(true); 
    popupBuilder.setNeutralButton("Ok", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
        invalidate(); 
        activity.init(); 
       } 
      }); 
    popupBuilder.show(); 

} 

当我调试我看到的是改变指令按钮上的文字是执行。感谢您的帮助

+0

你是什么意思用户输了? – Libin

+0

当比赛结束时。当用户输了我的比赛结束。 – Hunsu

回答

2

问题是您的init()方法调用setContentView()

当你这样做时,活动的布局被重新充满。所有对视图的引用(例如bstart)现在都指向布局的旧副本中的“视图”,现在用户不再可以看到该视图。

由于bstart仍然参考了一些东西,但是if (bStart == null)是错误的,您没有得到更新的参考bstart

我会分开你的逻辑来更新按钮的文本从你的逻辑设置你的活动的布局。

0

将setContentView移动到onCreate。因为当你调用activity.init();你再次设置视图

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_catch_game); 
    init(); 
} 
+0

但是像这样开始按钮没有显示,因为我在开始游戏时已经将其删除了 – Hunsu

+0

您是否真的删除了它,或者您正在调用['setVisibility(int)'](http://developer.android.com/参考/机器人/视图/ View.html#setVisibility(INT))?后者将允许您稍后重新显示。 –

+0

你必须使用bStart.setVisibility(View.GONE)隐藏按钮 – Libin