首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >手机回按钮按下只回应3-5次点击?

手机回按钮按下只回应3-5次点击?
EN

Stack Overflow用户
提问于 2017-08-24 13:07:56
回答 2查看 120关注 0票数 2

我在活动中有一个片段,它有嵌套的全屏,它们就像嵌套的屏幕,所以我在容器活动中处理回压,如下所示:

代码语言:javascript
复制
    @Override
            public void onBackPressed() {
                DrawerLayout drawer = (DrawerLayout) 
    findViewById(R.id.drawer_layout); // first line where I have debug point
                if (drawer.isDrawerOpen(GravityCompat.START)) {
                    drawer.closeDrawer(GravityCompat.START);
// If drawer is open then on backpress drawer will be closed
                } else {
                    if (docFragment != null && docFragment.isAdded()) {
                        if (docFragment.isNestedViewVisible() == View.VISIBLE) {
                             docFragment.closeNestedView();
        // Above method will hide the nested view in fragment 
        // & return back to original default view of fragment
                        } else {
                            super.onBackPressed();
                        }
                    } else {
                        super.onBackPressed();
                    }
                }
            }

我要添加片段的代码:

代码语言:javascript
复制
docFragment = DocumentFragment.newInstance();
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.container, docFragment, "Documents");
        fragmentTransaction.commit();

有些时候,手机回键没有任何效果。我得按3-5次。我在调试器中运行了这个应用程序,但是调试器在3到5次点击之后也会进入第一行。

这是从活动中处理的。

但是为什么我的onBackPress事件在3到5次点击后就会被解雇,而不是一次点击?

更新:

下面的用户Maik Peschuttersuggested,我的片段可能有一些很重的过程,这可能会导致onBackPress交付延迟或根本不发生。

我在这种感性的研究中发现,背景中似乎有一个服务在发送一些信号(广播),导致我的UI被重绘,而被重绘的组件很复杂,需要时间。

来自后台服务的信号的频率太高了,在毫秒内,它导致了重绘的迅速发生,这使得我的应用程序freez,现在我的预定服务是以20秒的间隔发送信号。这解决了我的问题。现在,点击第一次响应&比之前要快得多。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-24 13:54:35

尝试调试应用程序。在活动中,在onBackPressed()方法的第一行中执行一个断点。因此,您可以确定该方法是否在您的手机返回按钮上的第一个点击之后被调用。

如果不是,可能FragmentManager已经处理了事件,并且每次点击按钮时都会从后台删除一个片段。

也许您的docFragment.closeNestedView()方法非常慢,因此在调用docFragment.closeNestedView()之后,docFragment.isNestedViewVisible()将返回而不是View.VISIBLE。没有密码很难说。

票数 1
EN

Stack Overflow用户

发布于 2017-08-24 13:16:52

由于您使用的是片段,我认为您应该看看FragmentTransaction.addToBackStack()popBackStack(),以找到一种更可靠的方法来处理按下的后退按钮。

也许这个链接会有所帮助:https://developer.android.com/training/implementing-navigation/temporal.html#back-fragments

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

https://stackoverflow.com/questions/45862486

复制
相关文章

相似问题

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