首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在onSaveInstanceState - DialogFragment之后无法执行此操作

在onSaveInstanceState - DialogFragment之后无法执行此操作
EN

Stack Overflow用户
提问于 2014-01-23 07:08:39
回答 3查看 14.7K关注 0票数 4

我已经覆盖了onSavedInstanceState并删除了超级,我没有做任何事务,更不用说不稳定函数或异步函数中的事务了。

我在自定义回调中调用它'onUserExistsListener‘

代码语言:javascript
复制
        @Override
        public Boolean userExists(Boolean exists) {
            if (exists) {


            }
            else
            {
             AlertDialogFragment Frag = AlertDialogFragment.newInstance(0, null);
             Frag.show(getSupportFragmentManager(), "warndialog");
            }
   };

我已经尝试了其他所有的问题,但仍然没有找到解决方案?有没有人?

代码:

代码语言:javascript
复制
AlertDialogFragment Frag = AlertDialogFragment.newInstance(0, null);
 Frag.show(getSupportFragmentManager(), "warndialog");

流程:

OnCreate:(LoadNames函数)

LoadNames回调->显示对话框。

进一步:

代码语言:javascript
复制
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        add_name_to_db();
    }

功能:

代码语言:javascript
复制
public void add_name_to_db() {
        Details.checkNameExists(user_txt.getText().toString());
        Details.setOnUserExistsListener(new onUserExistsListener() {

            @Override
            public Boolean userExists(Boolean exists) {

                if (exists) 
                    {

                    } else {

                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                AlertDialogFragment Frag = AlertDialogFragment.newInstance(0, null);
                                Frag.show(getSupportFragmentManager(), "warndialog");

                            }

                        });

                    }
                } else {
                    Toast.makeText(getApplicationContext(), "This is not a valid KIK username",
                            Toast.LENGTH_SHORT).show();
                }

                return exists;
            }

        });

    }
EN

回答 3

Stack Overflow用户

发布于 2014-01-27 13:50:03

通过调用Frag.show(getSupportFragmentManager(), "warndialog");,您实际上是在执行片段事务(请参见show())。

如果活动的onSaveInstanceState()方法已被调用,则当您尝试显示对话框时将抛出IllegalStateException。您需要更改代码,以确保在显示对话框片段时,是在活动状态恢复后执行的(即,onPostResume())。有关详细信息,请参阅此blog post

您还可以提交允许状态loss的事务;

票数 6
EN

Stack Overflow用户

发布于 2014-01-25 09:18:52

EDIT:您需要在onCreate()中调用super.onCreate(SavedInstanceState)。没有它它是不会工作的。

onSaveInstanceState()在活动结束时发生。现在停下来在那里显示UI已经太晚了。

您希望此代码在什么时候运行?当后退按钮被按下的时候?

将您的代码放在onBackPressed()中。

Android: Proper Way to use onBackPressed() with Toast

如果您希望代码在活动开始时运行,请编辑,就像您在另一条评论中提到的那样。不要使用onSaveInstanceState()。将您的代码放在onCreate()或onResume()中。

票数 0
EN

Stack Overflow用户

发布于 2014-01-25 10:05:43

根据回调的工作方式,您可能需要在UI线程上运行这些代码行,如下所示:

代码语言:javascript
复制
runOnUiThread(new Runnable() {
    public void run() {
        AlertDialogFragment Frag = AlertDialogFragment.newInstance(0, null);
        Frag.show(getSupportFragmentManager(), "warndialog");

    }

});
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21295991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档