【问题标题】:"Can not perform this action after onSaveInstanceState" exception after rotate device旋转设备后出现“onSaveInstanceState 后无法执行此操作”异常
【发布时间】:2018-07-12 15:33:29
【问题描述】:

我有一个 ViewHolder,并且在 bindView() 方法中设置了一个 OnLongClickListener

当我旋转设备并长按列表项时 java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 发生异常。

我已经重写了 show() 方法并测试了 commitAllowingStateLoss 但仍然出现异常。

谁能帮帮我?

public void bindView(final FragmentActivity activity) {

    ...

    itemView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            FingerprintDialogFragment fingerprintDialogFragment = FingerprintDialogFragment.getInstance(DecreeItemViewHolder.this);
            fingerprintDialogFragment.show(activity.getSupportFragmentManager(), FINGERPRINT_DIALOG_TAG);

            return true;
        });
    }
}

【问题讨论】:

  • 不要将 Activity 传递给 Adapter 到 Viewholder,而是尝试传递 LongClickListener
  • 谢谢您,您的解决方案让我有一个想法... :)

标签: android dialogfragment onsaveinstancestate


【解决方案1】:

我通过一个代表团解决了这个问题......

  1. Caller Class中添加checkFingerprintAuthentication()方法:

    void checkFingerprintAuthentication() {
        FingerprintDialogFragment fingerprintDialogFragment = FingerprintDialogFragment.getInstance(this);
        fingerprintDialogFragment.show(getActivity().getSupportFragmentManager(), FINGERPRINT_DIALOG_TAG);
    }
    
  2. 将 Caller Class 作为参数发送到 View Holder 并调用 checkFingerprintAuthentication()

    public void bindView(final DecreeCartableController cartableController) {
        ...
    
        itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                cartableController.checkFingerprintAuthentication();
                return true;
           }
       });
    }
    

问题解决了! :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-20
    • 2014-10-18
    • 2014-03-05
    • 2017-06-21
    • 1970-01-01
    • 2015-12-23
    相关资源
    最近更新 更多