![](/img/trans.png)
[英]DialogFragment timepicker onCancel and onDismiss problem
[英]Overriding onDismiss or onCancel doesn't work in DialogFragment
我已經完全按照文檔中的方式實現了全屏DialogFragment
。
public void showDialog() {
CustomDialogFragment newFragment = new CustomDialogFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragmentTransaction.add(android.R.id.content, newFragment).addToBackStack(null).commit();
}
public class CustomDialogFragment extends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.purchase_items, container, false);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
@Override
public void onCancel(@NonNull DialogInterface dialog) {
super.onCancel(dialog);
// Code added her doesn't run on back press
}
}
注意:如果我使用show()
打開片段,onCancel onCancel()
和onDismiss()
函數會正常運行,但這不是我想要的。 這是一個錯誤還是我做錯了什么?
添加此方法以在活動中顯示您的對話框:-
public void showDialog() {
CustomDialogFragment newFragment = new CustomDialogFragment();
newFragment.show(getSupportFragmentManager(), "show_fragment");
}
添加此樣式:-
<style name="FullScreenfragment" parent="Theme.AppCompat.Light.Dialog">
<item name="android:backgroundDimEnabled">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:padding">0dp</item>
<item name="android:windowIsFloating">false</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowCloseOnTouchOutside">false</item>
</style>
在您的 CustomDialogFragment 中添加此代碼:-
@Override
public int getTheme() {
return R.style.FullScreenfragment;
}
Function showDialog 有些問題,你可以試試這個調用顯示你的自定義對話框:
public void showDialog() {
CustomDialogFragment newFragment = new CustomDialogFragment();
newFragment.show(getSupportFragmentManager(), "show_dialog");
}
文本“show_dialog”,您可以根據需要替換文本
編輯:如果你想要全屏對話框,試試這個:
添加自定義樣式:
<style name="full_screen_dialog">
<item name="android:windowIsFloating">true</item>
</style>
並在 CustomDialog 中設置:
public class CustomDialogFragment extends DialogFragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.purchase_items, container, false);
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
@Override
public void onCancel(@NonNull DialogInterface dialog) {
super.onCancel(dialog);
}
@Override
public int getTheme() {
return R.style.full_screen_dialog;
}
@Override
public void onResume() {
super.onResume();
if (getDialog() != null) {
WindowManager.LayoutParams params = getDialog().getWindow().getAttributes();
params.width = WindowManager.LayoutParams.MATCH_PARENT;
params.height = WindowManager.LayoutParams.MATCH_PARENT;
getDialog().getWindow().setAttributes(params);
}
}
}
因此,我最終覆蓋了DialogFragment
中的dismiss()
和onDestroyView()
函數以具有相同的行為,同時仍將其作為片段而不是對話框打開,並且它似乎有效。
public class CustomDialogFragment extends DialogFragment {
boolean isDismissed;
OnCancelListener onCancelListener;
public CustomDialogFragment(@NonNull OnCancelListener onCancelListener) {
this.onCancelListener = onCancelListener;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.purchase_items, container, false);
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
@Override
public void dismiss() {
super.dismiss();
this.isDismissed = true;
}
@Override
public void onDestroyView() {
super.onDestroyView();
if (!this.isDismissed) {
this.onCancelListener.onCancel();
}
}
public interface OnCancelListener {
void onCancel();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.