java - 按钮未更新其文本

标签 java android

我正在开发一款 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/

相关文章:

安卓警告 : CHECK surface infomation creating=false

android - 如何在不发生截断的情况下显示android actionbar标题

java - Postgresql 和 JDBC 检查元数据中的 TYPE ENUM

Java Spring 错误 : It is not working even i đid exactly everything the teacher said

Java 使用 teradata 给出异常 - 在 DDL 语句之后只有 ET 或 null 语句是合法的

java - 不使用 OPENSSL 打开 pkcs8 文件 key

Android ListView Item - 从右到左动画菜单

android - 支持 64 位会导致在 build.gradle 中添加 ndk.abiFilters 时出错

java - NoSuchFieldException:NumberPicker Android 中的 mSelectorWheelPaint

java - 552 抱歉,您的信封发件人域必须存在 (#5.7.1)