相关疑难解决方法(0)

DialogFrag#show()来自片段抛出"IllegalStateException:onSaveInstanceState后无法执行此操作"

为了清楚起见,我已经阅读了关于"IllegalStateException:在onSaveInstanceState之后无法执行此操作"的十几个SO问题,我已经阅读了Alex Lockwood的博客文章http://www.androiddesignpatterns.com/2013/08/片段事务提交状态-loss.html

所以我不是盲目地问这个.

我有一个非常简单的用例案例,涉及AsyncTask或任何后台处理.

我有一个包含按钮的片段.在按钮的onClickListener上,我创建了一个DialogFragment并显示它.

public final class OverviewFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        final View view = inflater.inflate(R.layout.overview_fragment, container, false);

        startNewGameButton = (Button) view.findViewById(R.id.buttonNewGame);
        startNewGameButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final NewGameFragment dialogFrag = NewGameFragment.create(getApplication());
                dialogFrag.show(getFragmentManager(), NewGameFragment.FRAGMENT_TAG);
            }
        });
}
Run Code Online (Sandbox Code Playgroud)

[NewGameFragment]

public final class NewGameFragment extends DialogFragment {

    public static final String FRAGMENT_TAG = "NewGameFragment";

    private static final String MESSAGE = "message";

    public static NewGameFragment …
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle android-fragments android-dialogfragment android-nested-fragment

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

暂停时onClick或onItemClick会导致"IllegalStateException:onSaveInstanceState后无法执行此操作"

我有一个TabActivity主机5倍FragmentActivity.其中一些包含按钮或列表,在其中onClick()onItemClick()创建和推送新片段.

在大多数情况下,这工作正常,但如果事情有点反应迟钝,或者测试人员做了一些愚蠢的事情(按住按钮或列表项,使用不同的手指切换标签,然后释放按钮/列表 - 100%可重复),我在活动暂停并保存后很快得到点击事件.请参阅日志片段:

10-30 17:05:16.258  3415  3415 D BKC DEBUG: More.onSaveInstanceState()
10-30 17:05:16.258  3415  3415 D BKC DEBUG: MoreFragment.onPause()
10-30 17:05:17.309  3415  3415 D BKC DEBUG: MoreFragment.onItemClick()
Run Code Online (Sandbox Code Playgroud)

在阅读了本文以及有关片段状态丢失的各种StackOverflow问题后,我没有看到如何解决这个问题的好答案.

  • 运用 commitAllowingStateLoss()(无条件)是一种可以隐藏真正错误的解决方法.
  • 我不确定取消注册OnClickListeners和OnItemClickListeners onSaveInstanceState会100%防止这种情况,对于每个片段中的每个按钮来说,它都是PITA.
  • 有人建议检查相关片段 isAdded(),但我可以确认这不起作用.
  • 我可以设置一个标志,onSaveInstanceState()onRestoreInstanceState()在onClick()中检查,但再次,这只是一个kludge.编辑:哦,片段没有onRestoreInstanceState(),但我可以旋转国旗onResume()或其他什么.

是否有一个正确的解决方案,我错过了,或者我应该选择我的kludge?

android android-fragments

13
推荐指数
1
解决办法
1655
查看次数