Android实现返回键操作思路

发布时间 - 2026-01-10 22:59:44    点击率:

记录用户点击的操作历史,使用栈数据结构,频繁的操作栈顶(添加,获取,删除),使用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);
  }

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


# Android  # 返回键  # android中LinearLayoutManager一键返回顶部示例  # Android实现点击两次返回键退出  # 在Unity中捕捉Android的常用按钮返回事件  # Android实现返回键功能  # Android点击按钮返回顶部实现代码  # 数据结构  # 大家多多  # 为空  # 判断是否  # 加载  # return  # false  # makeText  # show  # Toast  # goBack  # private  # super  # size  # HISTORY  # key  # removeFirst  # lt  # getFirst  # gt 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】  如何在香港免费服务器上快速搭建网站?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  Python自动化办公教程_ExcelWordPDF批量处理案例  太平洋网站制作公司,网络用语太平洋是什么意思?  昵图网官方站入口 昵图网素材图库官网入口  php 三元运算符实例详细介绍  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  javascript中的try catch异常捕获机制用法分析  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  jQuery 常见小例汇总  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  nginx修改上传文件大小限制的方法  在线制作视频的网站有哪些,电脑如何制作视频短片?  Laravel如何使用withoutEvents方法临时禁用模型事件  如何快速生成ASP一键建站模板并优化安全性?  油猴 教程,油猴搜脚本为什么会网页无法显示?  网站制作壁纸教程视频,电脑壁纸网站?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  Python结构化数据采集_字段抽取解析【教程】  如何用5美元大硬盘VPS安全高效搭建个人网站?  微信推文制作网站有哪些,怎么做微信推文,急?  Laravel如何优化应用性能?(缓存和优化命令)  C语言设计一个闪闪的圣诞树  教你用AI将一段旋律扩展成一首完整的曲子  Laravel Session怎么存储_Laravel Session驱动配置详解  如何在阿里云虚拟服务器快速搭建网站?  如何彻底删除建站之星生成的Banner?  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  Laravel如何处理CORS跨域请求?(配置示例)  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  高性能网站服务器部署指南:稳定运行与安全配置优化方案  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  如何基于PHP生成高效IDC网络公司建站源码?  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  香港服务器建站指南:免备案优势与SEO优化技巧全解析  如何在橙子建站中快速调整背景颜色?  Laravel如何实现模型的全局作用域?(Global Scope示例)  PHP正则匹配日期和时间(时间戳转换)的实例代码  如何快速搭建支持数据库操作的智能建站平台?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  JS经典正则表达式笔试题汇总  Android实现代码画虚线边框背景效果  Laravel如何使用Blade组件和插槽?(Component代码示例)