Android实现返回键操作思路
程序员文章站
2023-12-20 22:22:40
记录用户点击的操作历史,使用栈数据结构,频繁的操作栈顶(添加,获取,删除),使用linkedlist
捕获用户的返回键操作,响应返回键,返回上一个界面
mainacti...
记录用户点击的操作历史,使用栈数据结构,频繁的操作栈顶(添加,获取,删除),使用linkedlist
捕获用户的返回键操作,响应返回键,返回上一个界面
mainactivity.java
/** * 返回键处理 */ @override public boolean onkeydown(int keycode, keyevent event) { if(keycode==keyevent.keycode_back){ boolean result=middlemanager.getinstance().goback(); if(!result){ toast.maketext(mainactivity.this, "是否退出应用", 1).show(); } return false; } return super.onkeydown(keycode, event); }
middlemanager.java
//操作历史栈 private linkedlist<string> history=new linkedlist<string>(); /** * 处理返回键 * @return */ public boolean goback() { //如果为空会抛异常 if(history.size()>0){ if(history.size()==1){ return false; } history.removefirst(); if(history.size()>0){ string key=history.getfirst(); baseview targetview=viewcache.get(key); maincontainer.removeallviews(); view child=targetview.getview(); maincontainer.addview(child); child.startanimation(animationutils.loadanimation(maincontainer.getcontext(), r.anim.left_to_right)); currentview=targetview; return true; } } return false; }
/** * 加载界面 */ public void loadview(class<? extends baseview> baseviewclass) { baseview baseview=null; //判断是否存在 string key=baseviewclass.getsimplename(); if(viewcache.containskey(key)){ baseview=viewcache.get(key); }else{ try { constructor<? extends baseview> constructor; constructor = baseviewclass.getconstructor(context.class); baseview=constructor.newinstance(maincontainer.getcontext()); } catch (exception e) { e.printstacktrace(); } viewcache.put(key, baseview); } maincontainer.removeallviews(); view child=baseview.getview(); maincontainer.addview(child); child.startanimation(animationutils.loadanimation(maincontainer.getcontext(), r.anim.left_to_right)); currentview=baseview; //放入栈 history.addfirst(key); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。