[android] 切换界面的问题
2016-06-28 16:44
501 查看
1. 界面重复创建的问题
2. 中间容器每次切换,都会清空容器中的子对象问题
3. 点击返回键的处理
解决重复创建的问题:
传递Class字节码对象,利用泛型来规定对象
判断界面是否存在,如果存在重复使用,如果不存在,创建;记录当前正在展示的界面
MainActivity.java
MiddleManager.java
IndexView.java
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; } }
相关文章推荐
- android 多线程断点续传下载 三
- android 项目中出现红色感叹号的解决方法
- Android色彩矩阵处理图像
- Android:控件GridView的使用
- android 多线程断点续传下载 二
- Android各种时间格式转换
- android 多线程断点续传下载 一
- Android Studio开发环境建立aidl文件,生成相应的java文件
- Android冷启动白屏解析,带你一步步分析和解决问题
- 68.Android之透明状态栏
- Android 性能优化
- Android项目引用第三方库问题总结
- AndroidStudio 找不到FragmentActivity
- android viewPager 切换页面时防止fragment重新加载
- Android 使用Canvas绘制可编辑倒车线
- Android 4.4 NotificationManagerService使用详解与原理分析(二)__原理分析
- 解决android splash 启动白屏问题
- Android 开发技巧-Listview通用适配器BaseCommAdapter
- android gps hal
- Android开发教程之电源管理详解