Android实现返回键操作思路

 更新时间:2017年02月11日 17:13:35   作者:陶士涵  
这篇文章主要为大家详细介绍了Android实现返回键操作思路,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

记录用户点击的操作历史,使用栈数据结构,频繁的操作栈顶(添加,获取,删除),使用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 获取APP的唯一标识applicationId的实例

    android 获取APP的唯一标识applicationId的实例

    下面小编就为大家分享一篇android 获取APP的唯一标识applicationId的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • Flutter 中 Dart的Mixin示例详解

    Flutter 中 Dart的Mixin示例详解

    这篇文章主要介绍了Flutter 中 Dart的Mixin的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • 实例讲解Android自定义控件

    实例讲解Android自定义控件

    本篇文章通过实例给大家讲解了Android自定义控件的使用技巧和需要注意的地方,跟着学习参考下吧。
    2017-12-12
  • Android开发之AlarmManager的用法详解

    Android开发之AlarmManager的用法详解

    这篇文章主要介绍了Android开发之AlarmManager的用法,是Android应用开发中非常实用的技能,需要的朋友可以参考下
    2014-07-07
  • android中图片的三级缓存cache策略(内存/文件/网络)

    android中图片的三级缓存cache策略(内存/文件/网络)

    实现图片缓存也不难,需要有相应的cache策略。这里我采用 内存-文件-网络 三层cache机制,其中内存缓存包括强引用缓存和软引用缓存(SoftReference),其实网络不算cache,这里姑且也把它划到缓存的层次结构中
    2013-06-06
  • 详解Android中接口回调、方法回调

    详解Android中接口回调、方法回调

    在Android开发中我们很多地方都用到了方法的回调,回调就是把方法的定义和功能导入实现分开的一种机制,目的是为了解耦他的本质是基于观察者设计模式,即观察者设计模式的的简化版。本文主要对Android中接口回调、方法回调进行详细介绍,下面跟着小编一起来看下吧
    2017-01-01
  • android 限制某个操作每天只能操作指定的次数(示例代码详解)

    android 限制某个操作每天只能操作指定的次数(示例代码详解)

    这篇文章主要介绍了android 限制某个操作每天只能操作指定的次数,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Android加载长图的多种方案分享

    Android加载长图的多种方案分享

    这篇文章主要介绍了Android加载长图的多种方案分享,帮助大家更好的理解和学习使用Android开发,感兴趣的朋友可以了解下
    2021-04-04
  • Android通话默认打开扬声器的方法

    Android通话默认打开扬声器的方法

    这篇文章主要介绍了Android通话默认打开扬声器的方法.小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Android 滑动Scrollview标题栏渐变效果(仿京东toolbar)

    Android 滑动Scrollview标题栏渐变效果(仿京东toolbar)

    这篇文章主要介绍了Android 滑动Scrollview标题栏渐变效果(仿京东toolbar),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01

最新评论