Android学习心得② - fragment中设置双击返回键退出程序

最近做的软件要实现双击返回键退出程序效果,其实一开始我是拒绝的,你不能让我改,我就马上去改,因为我不愿意改完了以后再加一些特技上去,代码“duang”一下,很快、很屌,这样用户出来一定会骂我,根本没有这样的软件,就证明上面那个是假的。后来我也经过证实他们确实是实用的,我改了大概一个小时左右,感觉还不错,后来我在用的时候也要求他们不要加特技,因为我要让用户看到,我用完之后是这个样子,你们用完之后也会是这个样子!

好啦不玩啦,下面正经点
然后捏我就上网搜啊搜啊,发现了Android中的“再按一次返回键退出程序”实现 的代码很好用, 下面贴出来

private long exitTime = 0;

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){   
        if((System.currentTimeMillis()-exitTime) > 2000){  
            Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();                                
            exitTime = System.currentTimeMillis();   
        } else {
            finish();
            System.exit(0);
        }
        return true;   
    }
    return super.onKeyDown(keyCode, event);
}

通过覆盖onKeyDown方法
不过呢,有一个问题。。这是基于Activity的方法,而我的程序主要是基于fragment的,activity只是个托管。。。所以这个方法不适用啊

于是我又各种查资料啊查资料啊希望能发现fragment中如何覆盖onKeyDown方法啊,后来都想到了要去进行fragment和activity的数据传递,幸亏我太懒了,觉得太麻烦,继续查资料,首先是看了Overflow上的Fragment activity catch onKeyDown and use in fragment,写进我的代码里,但是还是有各种异常。。然后继续查资料,最终找了解决办法:

友情提供 fragment监听返回键

修改了一下上面文章的代码,就可以点击两次返回键退出程序啦~

private View.OnKeyListener backListener = new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK
                    && event.getAction() == KeyEvent.ACTION_DOWN) {
                // ToDo
                if ((System.currentTimeMillis() - exitTime) > 2000) {
                    Toast.makeText(getActivity(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
                    exitTime = System.currentTimeMillis();
                } else {
                    // 这里是我做了保存数据操作
                    BLEDeviceLab.get(getActivity()).saveDevices();
                    mEditor.putString("ip", ipAddress);
                    mEditor.commit();
                    getActivity().finish();
                    System.exit(0);
                }
                return true;
            }
            return false;
        }
    };

“duang”的一下,软件就完成啦!( 请体谅我这个有病(精神病)之人(>_<))

展开阅读全文

没有更多推荐了,返回首页