在 Activity 关闭时正确设置警报对话框?

Properly setting up an alertdialog on Activity closing?

我有一个 activity 有两个分数。我希望用户选择一个获胜者,如果他们在关闭时相同(即玩家 1 或玩家 2)。作为一个 .NET 用户,我主要尝试做 MessageBox。

不幸的是,根据我的阅读,android 不会以相同的方式执行 UI 线程。 activity 有 "a leaked window"。我查看了 SO,发现这个想法是将 "dismiss" 放在 "onPause" 中。但是,我没有看到 "onPause" 函数并且对如何实现它感到困惑。所以我尝试了下面的方法,但得到了同样的错误。

我可以对这个人做些什么来确保它正常工作?

  public void onFinish(View v) {
    //get scores
    TextView score1tv = (TextView) findViewById(R.id.tvScore1);
     score1 = score1tv.getText().toString();
    TextView score2tv = (TextView) findViewById(R.id.tvScore2);
     score2 = score2tv.getText().toString();

    //Make sure they aren't the same
    int i_Score1 = Integer.parseInt(score1);
    int i_Score2 = Integer.parseInt(score2);

    if (i_Score1 == i_Score2){

      //alert user
      new AlertDialog.Builder(this)
                .setTitle("Duplicate score")
                .setMessage("Whose score won the bout?")
                .setPositiveButton(boutData[1], new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        //fencer 1 won
                        score1 = "V" + score1;
                        dialog.dismiss();
                    }
                })
                .setNegativeButton(boutData[3], new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        score2 = "V" + score2;
                        dialog.dismiss();
                    }
                })
                .setIcon(android.R.drawable.ic_dialog_alert)
                .create()
                .show();
    }
    Intent intent = new Intent();
    intent.putExtra("edittextvalue","value_here");
    setResult(RESULT_OK, intent);
    finish();
}

编辑:这是我得到的解决方案,感谢我收到的帮助:

 public void onFinish(View v) {
    //get scores
    TextView score1tv = (TextView) findViewById(R.id.tvScore1);
     score1 = score1tv.getText().toString();
    TextView score2tv = (TextView) findViewById(R.id.tvScore2);
     score2 = score2tv.getText().toString();

    //Make sure they aren't the same
    int i_Score1 = Integer.parseInt(score1);
    int i_Score2 = Integer.parseInt(score2);

    if (score1 == score2){

      //alert user
      new AlertDialog.Builder(this)
                .setTitle("Duplicate score")
                .setMessage("Whose score won the bout?")
                .setPositiveButton(boutData[1], new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        //fencer 1 won
                        score1 = "V" + score1;

                        //close out
                        Intent intent = new Intent();
                        intent.putExtra("edittextvalue","value_here");
                        setResult(RESULT_OK, intent);
                        finish();
                       }
                })
                .setNegativeButton(boutData[3], new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        score2 = "V" + score2;

                        //close out
                        Intent intent = new Intent();
                        intent.putExtra("edittextvalue","value_here");
                        setResult(RESULT_OK, intent);
                        finish();

                    }
                })
                .setIcon(android.R.drawable.ic_dialog_alert)
                .create()
                .show();
    }
    else{
        Intent intent = new Intent();
        intent.putExtra("edittextvalue","value_here");
        setResult(RESULT_OK, intent);
        finish();
    }

}

将最后四行放入 else 子句中,并在您的 onClick 方法中做类似的事情。

此外,您不必手动调用 dialog.dismiss()。