zoukankan      html  css  js  c++  java
  • [android] 切换界面的问题

    1. 界面重复创建的问题

    2. 中间容器每次切换,都会清空容器中的子对象问题

    3. 点击返回键的处理

     

    解决重复创建的问题:

    传递Class字节码对象,利用泛型来规定对象

    判断界面是否存在,如果存在重复使用,如果不存在,创建;记录当前正在展示的界面

    MainActivity.java

        /**
         * 初始化主体
         */
        public void initMiddle() {
            mainContainer=(RelativeLayout) findViewById(R.id.il_main);
            MiddleManager.getInstance().setMainContainer(mainContainer);
            MiddleManager.getInstance().loadView(LoginView.class);
        }

    MiddleManager.java

    package com.tsh.lottery.views;
    
    import java.lang.reflect.Constructor;
    import java.util.HashMap;
    import java.util.Map;
    
    import android.content.Context;
    import android.view.View;
    import android.view.animation.AnimationUtils;
    import android.widget.RelativeLayout;
    
    import com.tsh.lottery.R;
    
    public class MiddleManager {
        private RelativeLayout mainContainer;
        //单例
        private static MiddleManager manager=new MiddleManager();
        private MiddleManager(){};
        public static MiddleManager getInstance(){
            return manager;
        }
        public void setMainContainer(RelativeLayout mainContainer) {
            this.mainContainer = mainContainer;
        }
        //界面缓存
        private Map<String,BaseView> VIEWCACHE=new HashMap<String,BaseView>();
        //当前界面
        private BaseView currentView;
        /**
         * 加载界面
         */
        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();
    //        if(currentView!=null){
    //            SlideUtil.slideOut(currentView.getView(), 2000);
    //        }
            
            View child=baseView.getView();
            mainContainer.addView(child);
            //SlideUtil.slideIn(child, 2000);
            child.startAnimation(AnimationUtils.loadAnimation(mainContainer.getContext(), R.anim.left_to_right));
            currentView=baseView;
        }
    }

    IndexView.java

    package com.tsh.lottery.views;
    
    import android.content.Context;
    import android.util.AttributeSet;
    import android.view.View;
    import android.view.ViewGroup.LayoutParams;
    import android.widget.TextView;
    /**
     * 会员界面
     * @author taoshihan
     *
     */
    public class IndexView extends BaseView{
        private TextView textView;
        /**
         * 构造函数
         * 经过之前的处理,这个构造函数只会执行一次
         * @param context
         */
        public IndexView(Context context) {
            super(context);
            initView();
        }
        /**
         * 初始化界面
         */
        private void initView() {
            textView=new TextView(context);
            LayoutParams params=new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
            textView.setLayoutParams(params);
            textView.setText("我是会员界面");
        }
        @Override
        public View getView() {
            return textView;
        }
    }

     

     

  • 相关阅读:
    机器学习作业(八)异常检测与推荐系统——Matlab实现
    机器学习笔记(九)异常检测与推荐系统
    Coursera 吴恩达 机器学习 学习笔记
    机器学习作业(七)非监督学习——Matlab实现
    机器学习笔记(八)非监督学习

    希尔排序
    霍纳算法的散列函数
    javascript判断给定字符串是否是回文
    JavaScript链表
  • 原文地址:https://www.cnblogs.com/taoshihan/p/5624052.html
Copyright © 2011-2022 走看看