2010-09-08 47 views
1

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

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

任何人都可以帮忙吗?

回答

1

活动只会调用onCreateDialog一次并保持对每个对话框的引用。如果要更新对话框,可以重写每次调用showDialog时调用的onPrepareDialog(int id,对话框对话框)。

因此,对于你上面的例子,你更新比分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在一个成员变量,所以你不要实例化一个新的对象每次显示对话框。

+0

完美;谢谢!至于成员变量,感谢提示,但它已经在我的待办事项列表中。我只想让对话框显示正确的信息。 :-) – 2010-09-09 00:09:29