• [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);
        }
  • 相关阅读:
    Python流程控制
    Python中的条件判断
    控制台出现“The script has an unsupported MIME type ('text/html')”报错
    React项目中使用hot-react-loader
    React组件绑定this的三种方法
    egg.js异步请求数据
    Zepto源码分析之二(新旧版本zepto.Z方法的区别)
    Zepto源码分析之一(代码结构及初始化)
    构建RN或Weex项目时,使用Android Studio常遇到的问题
    CentOS安装PHP7.*
  • 原文地址:https://www.cnblogs.com/taoshihan/p/5625680.html
Copyright © 2020-2023  润新知