更新显示的对话框
Updating a shown Dialog
我使用自定义布局创建了 Dialog
:
public class WaitDialog extends DialogFragment {
[..]
@SuppressLint("InflateParams")
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View viewDlg = inflater.inflate(R.layout.dialog_finish, null);
tvStatusMain = (TextView) viewDlg.findViewById(R.id.tvStatusMain);
[..]
}
public void setMessage(String message) {
tvStatusMain.setText(message);
}
}
这段代码工作正常,但是当我像这样实例化 Dialog
时:
flexWaitDialog = new WaitDialog();
flexWaitDialog.setCancelable(false);
flexWaitDialog.show(this.getFragmentManager(), "login");
然后尝试更新消息:
flexWaitDialog.setMessage(getString(R.string.initialising));
它显示了布局中的默认字符串。但是,当我使用 Handler
:
new Handler().post(new Runnable() {
@Override
public void run() {
flexWaitDialog.setMessage(getString(R.string.initialising));
}
});
它确实有效。这种跳圈有理由吗?如果没有,有没有更好的方法?
我认为,onResume
在 onCreateDialog
之前调用。
您可以修改您的 class 来处理:
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View viewDlg = inflater.inflate(R.layout.dialog_finish, null);
tvStatusMain = (TextView) viewDlg.findViewById(R.id.tvStatusMain);
if (mMessage != null) {
tvStatusMain.seText(mMessage);
}
mViewCreated = true;
[..]
}
public void setMessage(String message) {
if (mViewCreated) {
tvStatusMain.setText(message);
} else {
mMessage = message
}
}
我使用自定义布局创建了 Dialog
:
public class WaitDialog extends DialogFragment {
[..]
@SuppressLint("InflateParams")
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View viewDlg = inflater.inflate(R.layout.dialog_finish, null);
tvStatusMain = (TextView) viewDlg.findViewById(R.id.tvStatusMain);
[..]
}
public void setMessage(String message) {
tvStatusMain.setText(message);
}
}
这段代码工作正常,但是当我像这样实例化 Dialog
时:
flexWaitDialog = new WaitDialog();
flexWaitDialog.setCancelable(false);
flexWaitDialog.show(this.getFragmentManager(), "login");
然后尝试更新消息:
flexWaitDialog.setMessage(getString(R.string.initialising));
它显示了布局中的默认字符串。但是,当我使用 Handler
:
new Handler().post(new Runnable() {
@Override
public void run() {
flexWaitDialog.setMessage(getString(R.string.initialising));
}
});
它确实有效。这种跳圈有理由吗?如果没有,有没有更好的方法?
我认为,onResume
在 onCreateDialog
之前调用。
您可以修改您的 class 来处理:
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View viewDlg = inflater.inflate(R.layout.dialog_finish, null);
tvStatusMain = (TextView) viewDlg.findViewById(R.id.tvStatusMain);
if (mMessage != null) {
tvStatusMain.seText(mMessage);
}
mViewCreated = true;
[..]
}
public void setMessage(String message) {
if (mViewCreated) {
tvStatusMain.setText(message);
} else {
mMessage = message
}
}