相关疑难解决方法(0)

在显示对话框时,我得到"在onSaveInstanceState之后无法执行此操作"

有些用户报告,如果他们使用通知栏中的快速操作,他们就会收到一个强制关闭.

我在通知中显示了一个快速操作,它调用了"TestDialog"类.在按下"贪睡"按钮后的TestDialog类中,我将显示SnoozeDialog.

private View.OnClickListener btnSnoozeOnClick() {
    return new View.OnClickListener() {

        public void onClick(View v) {
            showSnoozeDialog();
        }
    };
}

private void showSnoozeDialog() {
    FragmentManager fm = getSupportFragmentManager();
    SnoozeDialog snoozeDialog = new SnoozeDialog();
    snoozeDialog.show(fm, "snooze_dialog");
}
Run Code Online (Sandbox Code Playgroud)

错误是 *IllegalStateException: Can not perform this action after onSaveInstanceState*.

IllegarStateException被触发的代码行是:

snoozeDialog.show(fm, "snooze_dialog");
Run Code Online (Sandbox Code Playgroud)

该类正在扩展"FragmentActivity",而"SnoozeDialog"类正在扩展"DialogFragment".

以下是错误的完整堆栈跟踪:

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1327)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1338)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
at android.support.v4.app.DialogFragment.show(DialogFragment.java:127)
at com.test.testing.TestDialog.f(TestDialog.java:538)
at com.test.testing.TestDialog.e(TestDialog.java:524)
at com.test.testing.TestDialog.d(TestDialog.java:519)
at com.test.testing.g.onClick(TestDialog.java:648)
at android.view.View.performClick(View.java:3620)
at …
Run Code Online (Sandbox Code Playgroud)

android dialog fragment

110
推荐指数
11
解决办法
4万
查看次数

bottomSheetDialogFragment 全屏

我想要实现的是类似于 Instagram 应用程序内网络浏览器,当您点击广告时使用:

Instagram 网络浏览器

我所做的,是我使用了一个 WebView bottomSheetDialogFragment,然后我重写onCreateDialog以获得这样的全屏:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    BottomSheetDialog bottomSheetDialog=(BottomSheetDialog)super.onCreateDialog(savedInstanceState);
    bottomSheetDialog.setOnShowListener(dialog -> {
        BottomSheetDialog dialogc = (BottomSheetDialog) dialog;
        FrameLayout bottomSheet =  dialogc .findViewById(android.support.design.R.id.design_bottom_sheet);
        BottomSheetBehavior.from(bottomSheet).setState(BottomSheetBehavior.STATE_EXPANDED);
        //BottomSheetBehavior.from(bottomSheet).setSkipCollapsed(true);
        //BottomSheetBehavior.from(bottomSheet).setHideable(true);
    });
    return bottomSheetDialog;
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的结果:

网页浏览器

我的问题是,如何获得全屏效果,或者如何实现类似 instagram 浏览器的功能?

ps:我首先尝试了 chrome 自定义选项卡,但无法将其添加到对话框片段中。

谢谢你。

android material-design bottom-sheet material-components material-components-android

42
推荐指数
9
解决办法
4万
查看次数

防止在外面触摸时解雇BottomSheetDialogFragment

我已经实现了一个BottomSheet对话框,我希望当用户在偷看时(未完全展开状态)触摸底部外面时防止底片消失.

我已经设置dialog.setCanceledOnTouchOutside(false);了代码,但它似乎没有任何影响.

这是我的BottomSheetDialogFragment类:

public class ShoppingCartBottomSheetFragment extends BottomSheetDialogFragment  {

    private BottomSheetBehavior.BottomSheetCallback mBottomSheetBehaviorCallback = new BottomSheetBehavior.BottomSheetCallback() {

        @Override
        public void onStateChanged(@NonNull View bottomSheet, int newState) {
            if (newState == BottomSheetBehavior.STATE_HIDDEN) {
                dismiss();
            }

        }

        @Override
        public void onSlide(@NonNull View bottomSheet, float slideOffset) {
        }
    };

    @Override
    public void setupDialog(Dialog dialog, int style) {
        super.setupDialog(dialog, style);

        View contentView = View.inflate(getContext(), R.layout.fragment_shopping_cart_bottom_sheet, null);

        dialog.setCanceledOnTouchOutside(false);

        dialog.setContentView(contentView);

        CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) ((View) contentView.getParent()).getLayoutParams();
        CoordinatorLayout.Behavior behavior = params.getBehavior();

        if( behavior != null && behavior …
Run Code Online (Sandbox Code Playgroud)

android bottom-sheet

18
推荐指数
4
解决办法
1万
查看次数

用键盘上方的EditText显示整个底部工作表

我正在实现一个UI,在该UI的底部将在键盘上方显示一个EditText,供用户输入值。问题是视图被键盘部分重叠,覆盖了底部的底部。

这是底表,没有键盘。

底页

这是显示键盘的底部表。

在此处输入图片说明

确保显示整个底表的最佳方法是什么?

谢谢。

android android-layout android-softkeyboard bottom-sheet

14
推荐指数
10
解决办法
1万
查看次数