前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[android] 切换界面的问题

[android] 切换界面的问题

作者头像
唯一Chat
发布2019-09-10 16:22:43
8030
发布2019-09-10 16:22:43
举报
文章被收录于专栏:陶士涵的菜地

1. 界面重复创建的问题

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

3. 点击返回键的处理

解决重复创建的问题:

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

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

MainActivity.java

代码语言:javascript
复制
    /**
     * 初始化主体
     */
    public void initMiddle() {
        mainContainer=(RelativeLayout) findViewById(R.id.il_main);
        MiddleManager.getInstance().setMainContainer(mainContainer);
        MiddleManager.getInstance().loadView(LoginView.class);
    }

MiddleManager.java

代码语言:javascript
复制
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

代码语言:javascript
复制
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;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-06-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档