十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
在activity中用keydown很容易实现对返回键的监听,但是这个函数不能再fragment中重载。
公司主营业务:做网站、成都网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出达州免费做网站回馈大家。
通过呕心沥血的寻找,终于找到了解决办法,对其他物理按键的监听也同理。
public class phonerecorder extends Fragment {
View listview;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
listview = (View) inflater.inflate(R.layout.phonerecorder, null);
mListView = (ListView) listview.findViewById(R.id.listView);
init();
mListView.setOnItemClickListener(clickitemlistener);
listview.setFocusable(true);//这个和下面的这个命令必须要设置了,才能监听back事件。
listview.setFocusableInTouchMode(true);
listview.setOnKeyListener(backlistener);
return listview;
}
private View.OnKeyListener backlistener = new View.OnKeyListener() {
@Override
public boolean onKey(View view, int i, KeyEvent keyEvent) {
if (keyEvent.getAction() == KeyEvent.ACTION_DOWN) {
if (i == KeyEvent.KEYCODE_BACK) { //表示按返回键 时的操作
if (!rootpatch.equals(currentfilepach) currentfilepach != null) {
File file = new File(currentfilepach);
openDir2(file.getParent().toString());
currentfilepach = file.getParent().toString();
return true;
} //后退
return false; //已处理
}
}
return false;
}
};
}
1.mounted中注册监听方法:
//监听返回键
if (window.history window.history.pushState) {
history.pushState(null, null, document.URL);
window.addEventListener('popstate', this.backButton, false);//false阻止默认事件
}
2.methods中写方法的实现:
backButton () {//点击返回键时实现的业务逻辑
},
3.在destroyed中写:(退出页面时销毁监听事件,防止其他页面使用)
destroyed () {
window.removeEventListener('popstate',this.backButton,false);//false阻止默认事件
},
在一次项目,有个需求涉及到切后台回到app时,需要调起一个弹窗,以这个需求为例子,跟大家分享下我如何实现的(大牛轻拍 = = )
首先,我们在app初始化时,要注册activity生命周期的回调,我这边项目里在BaseApplication初始化时调用registerActivityLifecycleCallbacks()
它需要一个ActivityLifecycleCallbacks类型的参数
这个接口涉及到所有activity生命周期的回调
回归正题,先初始化ActivityLifecycleCallbacks,
我们现在要做的是后台回前台,所以我们只选择onActivityStarted和onActivityPaused
我是这么做判断的,给个foregroundActivityCount去表示当前app有多少个activity处于启动的状态,给个Boolean值appInBackground判断app是否处于后台,每次打开app,当启动一个activity时,就统计开启activity的次数,并且调用你所需要的监听方法;只要在start 和 stop时判断有所activity都stop了,当当前activity启动次数为0时,说明app处于后台;
初始化已经完成,接下来就是怎么调用了。我们去到后台回来时需要操作的activity或者fragment,在初始化时调取BaseApplication里面刚才设定的方法
在里面写下你后台回来时你需要的操作
还有一个缺陷,假如是在指定fragment做监听怎么办?其实都差不多的,fragment在activity里,绑定 了activity的生命周期,假设我们要在指定的fragment才调取这个方法,我们需要在加一层判断,判断当前fragment是否可见
这样,只要你每次从后台回来,都可以监听到,但如果不在当前fragment的话,就不会调用你设定的方法。
以上,是我刚接触不久的问题,分享给大家,写的不好的大家见谅,有问题可以评论或私信我,本人还是实习生,请轻拍= =
1、挂载完成后,判断浏览器是否支持popstate
mounted(){
if (window.history window.history.pushState) {
history.pushState(null, null, document.URL);
window.addEventListener('popstate', this.fun, false);//false阻止默认事件
}
},
2、页面销毁时,取消监听。否则其他vue路由页面也会被监听 (destroyed钩子在使用 keep-alive就不会执行) 在开发过程中遇到一个问题,每次返回只在第一次有效,后面就没有效果了,于是在每次打开弹框的时候动态绑定事件,在返回时解除绑定,问题就解决了。
destroyed(){
window.removeEventListener('popstate', this.fun, false);//false阻止默认事件
},
3、将监听操作写在methods里面,removeEventListener取消监听内容必须跟开启监听保持一致,所以函数拿到methods里面写
methods:{
fun(){
console.log("监听到了");
}
}