android - Alert Builder 只在第一次调用?

标签 android

我已经实现了以下与 showDialog() 和 onDialogCreate() 一起使用的函数,但我希望每次都调用该方法,因为它会在每次显示对话框时计算 TextView 的文本。

private AlertDialog overallScoreDialog(){
    AlertDialog.Builder alert = new AlertDialog.Builder(this);
    Context mContext = getApplicationContext();
    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
    View layout = inflater.inflate(R.layout.overall_score_dialog,
            (ViewGroup) findViewById(R.id.overall_score_dialog_layout_root));
    alert.setTitle("Results");  

    TextView tv = (TextView) layout.findViewById(R.id.overallscoreresults);
    ScoreCalculator sc = new ScoreCalculator(this, calculatorVO);
    tv.setText(Double.toString(sc.getTotalScore()));

    alert.setView(layout);
    alert.setPositiveButton(R.string.done, new DialogInterface.OnClickListener() {  
        public void onClick(DialogInterface dialog, int whichButton) {
            return;                  
        }  
    });  

    AlertDialog ad = alert.create();
    return ad;
}

有人能帮忙吗?

最佳答案

Activity 只会调用一次 onCreateDialog 并保留对每个对话框的引用。如果你想更新一个对话框,你可以覆盖每次调用 showDialog 时调用的 onPrepareDialog(int id, Dialog dialog) 。

因此对于上面的示例,您可以使用分数更新 TextView,您可以执行以下操作:

@Override
protected void onPrepareDialog(int id, Dialog dialog) {
    TextView tv = (TextView) dialog.findViewById(R.id.overallscoreresults);
    ScoreCalculator sc = new ScoreCalculator(this, calculatorVO);
    tv.setText(Double.toString(sc.getTotalScore()));
}

您可能还想将 ScoreCalculator 保留在一个成员变量中,这样您就不会在每次显示对话框时都实例化一个新对象。

关于android - Alert Builder 只在第一次调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3672806/

相关文章:

android - RecyclerView with CardView Items, notifyItemChanged 和阴影问题

android - 在kotlin中对包含数字的字符串进行排序

java - 如何在从 xml 解析中选择的微调器上显示/烘烤字符串数组的相关项

android - 手势和 OpenGL

c# - 使用 ASP.NET 生成可以在 Android 上下载的 vCard

android - 设置选项卡的宽度

android - 每次构建都将痛苦的 Unity 项目导出到 Android(我做错了什么)

android - 如何获取Android中的所有列?

java - 将 SQLite 数据导出到 CSV 仅输出 CSV 文件中数据库的最后一个条目

android - 如何找到离地理点最近的警察局