我正在开发一款 Android 游戏。当应用程序启动时,它会显示一个按钮(“开始”)来开始游戏。当用户失败时,应用程序应显示原始 View 并将按钮文本更改为“重新启动”。当我启动应用程序时,一切正常,但当用户丢失时,我得到原始 View (按钮文本未更改),甚至按钮没有响应。我有两个类: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();
}
当我调试时,我看到更改按钮文本的指令被执行。感谢您的帮助
最佳答案
问题是你的init()
方法调用setContentView()
.
当您执行此操作时, Activity 的布局将重新膨胀。对 View 的所有引用(例如 bstart
)现在都指向旧布局副本中的 View ,该副本现在对用户不再可见。
自 bstart
但仍在引用某些内容,if (bStart == null)
为 false,您不会获得对 bstart
的更新引用.
我会将更新按钮文本的逻辑与设置 Activity 布局的逻辑分开。
关于java - 按钮未更新其文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22611098/