記錄使用者點選的操作曆史,使用棧資料結構,頻繁的操作棧頂(添加,擷取,删除),使用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 history=new linkedlist();
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);
}
以上所述是小編給大家介紹的android實作傳回鍵功能,希望對大家有所幫助