Android 警报生成器仅在第一次调用?

Android 警报生成器仅在第一次调用?,android,Android,我已经实现了以下用于showDialog()和onDialogCreate()的函数,但我希望每次都调用该方法,因为它在每次显示对话框时都会计算文本视图的文本 private AlertDialog overallScoreDialog(){ AlertDialog.Builder alert = new AlertDialog.Builder(this); Context mContext = getApplicationContext(); LayoutInflate

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

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;
}

有人能帮忙吗?

活动将只调用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保留在一个成员变量中,这样您就不会每次显示对话框时都实例化一个新对象。

活动只调用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保存在一个成员变量中,这样就不会每次显示对话框时都实例化一个新对象。

Perfect;谢谢至于成员变量,谢谢你的提示,但它已经在我的待办事项列表中了。我只是想让对话框显示正确的信息。:-)完美的谢谢至于成员变量,谢谢你的提示,但它已经在我的待办事项列表中了。我只是想让对话框显示正确的信息。:-)