我有一个 DialogFragment,它有一个 ProgressBar:
public class DialogFragmentProgress extends DialogFragment {
final static String DTAG = "FileCmd";
View v;
ProgressBar pb = null;
TextView tv = null;
public void setMsg(String msg){
Log.d(DTAG,"ProgressBar: setMsg("+msg+")");
if (tv != null){
Log.d(DTAG,"ProgressBar: (tv != null)");
tv.setText(msg);
}else{
Log.d(DTAG,"ProgressBar: (tv == null)");
}
}
public void setProgress(int progress){
Log.d(DTAG,"ProgressBar: setProgress("+progress+")");
if (pb != null){
Log.d(DTAG,"ProgressBar: (pb != null)");
pb.setProgress(progress);
Log.d(DTAG,"ProgressBar: getProgress() return "+pb.getProgress());
}else{
Log.d(DTAG,"ProgressBar: (pb == null)");
}
}
public static DialogFragmentProgress newInstance() {
DialogFragmentProgress fragment = new DialogFragmentProgress();
Log.d(DTAG,"ProgressBar: DialogFragmentProgress.newInstance()!");
return fragment;
}
public DialogFragmentProgress() {
// TODO Auto-generated constructor stub
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
v = inflater.inflate(R.layout.progressbar, null);
builder.setView(v)
.setTitle(R.string.progress_prompt)
.setNegativeButton(R.string.negative, null);
tv = (TextView)v.findViewById(R.id.progressbar_text);
pb = (ProgressBar)v.findViewById(R.id.progressbar);
pb.setMax(100);
pb.setProgress(10);
Log.d(DTAG,"ProgressBar: DialogFragmentProgress.onCreateDialog()!");
return builder.create();
}
}
在 MainActivity 中:
DialogFragmentProgress dfp = new DialogFragmentProgress();
dfp.show(getSupportFragmentManager(), "");
dfp.setProgress(50);
dfp.setMsg(srcFile.getName());
日志输出:
11-19 01:42:57.744: D/FileCmd(2095): ProgressBar: setProgress(50)
11-19 01:42:57.744: D/FileCmd(2095): ProgressBar: (pb == null)
11-19 01:42:57.744: D/FileCmd(2095): ProgressBar: setMsg(.qm_guid)
11-19 01:42:57.744: D/FileCmd(2095): ProgressBar: (tv == null)
11-19 01:42:59.494: D/FileCmd(2095): ProgressBar: DialogFragmentProgress.onCreateDialog()!
请看时间,这意味着 onCreateDialog() 被调用得非常晚!所以我不能得到电视和PB。有什么问题?我需要立即显示对话框,然后我可以设置 ProgressBar。