欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:

下一篇: