我有一个带有很多AppCompat活动的应用,其中有一些我正在使用此代码显示DialogFragment:
new PauseDialog().show(getSupportFragmentManager(), "dialog");
该对话框只是一个PAUSE对话框,带有退出和继续按钮。两者都在片段对话框上执行dismiss()。正确分配了它,但是有一个罕见的问题。当我打开一个新活动时,该对话框在活动更改中显示5-10ms。这是对话框的非常罕见的版本,没有正确的大小。非常非常罕见。这是一个损坏的版本。
这怎么可能,我该如何避免?我严重地给DialogFragment打电话了吗?
我的对话框:
public class PauseDialog extends DialogFragment {
public interface PauseDialogListener {
void onPauseDialogExitClicked();
void onPauseDialogResumeClicked();
}
public PauseDialog() {
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.CustomDialogTheme); //must be calle before dialog creation.
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialog_pause, container);
setCancelable(false);
return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Button exit = view.findViewById(R.id.exitButton);
Button resume = view.findViewById(R.id.resumeButton);
exit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((PauseDialogListener)getActivity()).onPauseDialogExitClicked();
dismiss();
}
});
resume.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((PauseDialogListener)getActivity()).onPauseDialogResumeClicked();
dismiss();
}
});
}
@Override
public void onResume() {
super.onResume();
int sw = Util.getInstance().getScreenWidth(getActivity());
int sh = Util.getInstance().getScreenHeight(getActivity());
getDialog().getWindow().setLayout((int)(sw*0.5), (int)(sh*0.6));
}
}
您的活动中有多少代码?onPauseDialogExitClicked();?尝试从onPauseDialogExitClicked();移动所有代码;一种新方法。我认为该活动的onPauseDialogExitClicked();中的代码在调用dismiss()之前得到处理...