电话后退按钮仅在敲击3-5次后响应?

时间:2017-08-24 13:07:57

标签: android onbackpressed

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

    @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();
                    }
                }
            }

我正在添加片段的代码:

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秒的间隔发送信号。这解决了我的问题。现在,水龙头会在第一时间响应比以前快得多。

2 个答案:

答案 0 :(得分:1)

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

如果没有,可能FragmentManager已经处理了事件,并且每次点击按钮时都会从backstack中删除片段。

也许你的docFragment.closeNestedView()方法非常慢,因此在调用docFragment.closeNestedView()之后,docFragment.isNestedViewVisible()不会立即返回View.VISIBLE。没有代码就很难说。

答案 1 :(得分:0)

由于您正在使用片段,我认为您应该查看FragmentTransaction.addToBackStack()popBackStack()以获得更可靠的方法来处理后退按钮。

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