You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中如何在AlertDialog的TextView显示int类型分数

问题:AlertDialog内的TextView无法显示分数

我希望在计时结束后,通过AlertDialog里的TextView显示当前分数,但试了好几种方法都没成功。以下是我的代码和尝试过的方案:

Main2Activity代码

public class Main2Activity extends AppCompatActivity {

    int score;
    TextView scoreText, scoreTextt;
    AppCompatButton btn_success;
    AlertDialog.Builder builderDialog;
    AlertDialog alertDialog;
    SharedPreferences preferences;
    // 注:原代码中timeText、imageArray、handler、runnable未定义,需确保已正确声明

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        score = 0;
        SharedPreferences myScore = this.getSharedPreferences("current_score", MODE_PRIVATE);
        score = myScore.getInt("current_score", score);
    }

    // 假设这是CountDownTimer的回调方法
    @Override
    public void onTick(long millisUntilFinished) {
        TextView timeText = (TextView) findViewById(R.id.textTime);
        timeText.setText("Zaman : " + millisUntilFinished / 1000);
    }

    @Override
    public void onFinish() {
        TextView timeText = (TextView) findViewById(R.id.textTime);
        timeText.setText("Süre Doldu ! ");
        // handler.removeCallbacks(runnable); // 需确保handler和runnable已初始化

        // 假设imageArray已初始化
        for (ImageView image : imageArray) {
            image.setVisibility(View.INVISIBLE);
        }

        if (score < 10){
            // 此处重启当前Activity的Intent可移除,无需重复启动
            // Intent intent = new Intent(getApplicationContext(), Main2Activity.class);
            // intent.putExtra("SCORE", score);
            showAlertDialog(R.layout.my_success_dialog);
        } else if (score >= 10){
            Intent intent = new Intent(Main2Activity.this, Main5Activity.class);
            startActivity(intent);
        }
    }

    // 显示AlertDialog的方法
    private void showAlertDialog(int myLayout){
        builderDialog = new AlertDialog.Builder(this);
        View layoutView = getLayoutInflater().inflate(myLayout,null);

        builderDialog.setMessage("asd" + score);
        AppCompatButton dialogButton = layoutView.findViewById(R.id.buttonTamam);
        builderDialog.setView(layoutView);
        builderDialog.setCancelable(false);
        alertDialog = builderDialog.create();
        alertDialog.show();

        dialogButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                alertDialog.dismiss();
            }
        });
    }

    // 增加分数的方法
    public void skoruArttır(View view){
        scoreText = (TextView) findViewById(R.id.textScore);
        score++;
        scoreText.setText("Skor: " + score);

        SharedPreferences myScore = getSharedPreferences("current_score", MODE_PRIVATE);
        SharedPreferences.Editor editor = myScore.edit();
        editor.putInt("current_score", score);
        editor.apply();
    }
}

my_success_dialog.xml布局

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Main2Activity">

    <RelativeLayout
        android:id="@+id/relativeLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="16dp"
        android:background="@color/colorPrimary"
        app:layout_constraintBottom_toTopOf="@+id/textView3"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <ImageView
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_centerInParent="true"
            android:background="@drawable/baseline_check_circle_24" />

    </RelativeLayout>

    <TextView
        android:id="@+id/textView3"
        android:layout_width="370dp"
        android:layout_height="87dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="16dp"
        android:layout_marginBottom="16dp"
        android:text="Success"
        android:textAlignment="center"
        app:layout_constraintBottom_toTopOf="@+id/txt_success"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.444"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/relativeLayout" />

    <TextView
        android:id="@+id/txt_success"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="16dp"
        android:text="Skor : "
        android:textAlignment="center"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView3"
        tools:ignore="MissingConstraints" />

    <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/buttonTamam"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="16dp"
        android:text="Okey"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.123"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/txt_success" />

    <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/buttonOk2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="16dp"
        android:text="Ok"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.872"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/txt_success" />

</androidx.constraintlayout.widget.ConstraintLayout>

尝试过的方法

  • 在分数增加的方法中设置TextView:
    scoreTextt = (TextView) findViewById(R.id.txtsuccess);
    scoreTextt.setText("Skor: " + score);
    
  • 使用未达到10分的SharedPreferences;
  • 创建单独的public方法increasingScore()。

解决方案

问题核心:通过Activity的findViewById无法获取AlertDialog布局内的控件——Dialog的布局是独立于Activity布局的,必须从inflate出来的Dialog布局视图中查找控件。

修改showAlertDialog方法,在inflate布局后找到txt_success并设置分数:

private void showAlertDialog(int myLayout){
    builderDialog = new AlertDialog.Builder(this);
    View layoutView = getLayoutInflater().inflate(myLayout,null);

    // 关键步骤:从Dialog的布局视图中获取目标TextView
    TextView dialogScoreView = layoutView.findViewById(R.id.txt_success);
    dialogScoreView.setText("Skor : " + score); // 设置当前分数

    AppCompatButton dialogButton = layoutView.findViewById(R.id.buttonTamam);
    builderDialog.setView(layoutView);
    builderDialog.setCancelable(false);
    alertDialog = builderDialog.create();
    alertDialog.show();

    dialogButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            alertDialog.dismiss();
        }
    });
}

额外说明:

  1. 原代码中builderDialog.setMessage("asd" + score)会被setView(layoutView)覆盖,设置Message无效,直接操作Dialog布局内的TextView即可。
  2. onFinish中重启Main2Activity的Intent可移除,无需重复启动当前Activity。

内容的提问来源于stack exchange,提问作者Twitch Arşivim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 06:32:32