实现不改变activity,只切换View

抽取View界面的基类

利用面向对象多态的思路,实现通用

TitleManager.java 管理标题

package com.tsh.lottery.views;import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RelativeLayout;import com.tsh.lottery.R;
/*** 标题管理* @author taoshihan**/
public class TitleManager {private RelativeLayout generalTitle,unloginTitle,loginTitle;private Button title_login_btn,title_unlogin_btn;private Activity activity;//单例private static TitleManager instance=new TitleManager();private TitleManager(){}public static TitleManager getInstance(){return instance;}/*** 初始化标题* @param activity*/public void init(Activity activity){this.activity=activity;generalTitle=(RelativeLayout) activity.findViewById(R.id.title_general);loginTitle=(RelativeLayout) activity.findViewById(R.id.title_login);unloginTitle=(RelativeLayout) activity.findViewById(R.id.title_unlogin);title_login_btn=(Button) activity.findViewById(R.id.title_login_btn);title_unlogin_btn=(Button) activity.findViewById(R.id.title_unlogin_btn);setListener();}/*** 设置点击事件*/private void setListener() {//登陆按钮title_login_btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {showLoginTitle();BaseView indexView=new IndexView(activity);MiddleManager.getInstance().loadView(indexView);}});//退出按钮title_unlogin_btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {showUnloginTitle();BaseView loginView=new LoginView(activity);MiddleManager.getInstance().loadView(loginView);}});}/*** 隐藏所有标题*/public void hideTitle(){generalTitle.setVisibility(View.GONE);unloginTitle.setVisibility(View.GONE);loginTitle.setVisibility(View.GONE);}/*** 显示通用的标题*/public void showGeneralTitle() {hideTitle();generalTitle.setVisibility(View.VISIBLE);}/*** 显示未登录的标题*/public void showUnloginTitle() {hideTitle();unloginTitle.setVisibility(View.VISIBLE);}/*** 显示已经登陆的标题*/public void showLoginTitle() {hideTitle();loginTitle.setVisibility(View.VISIBLE);}
}

MiddleManager.java 管理主体内容

package com.tsh.lottery.views;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;}/*** 加载界面*/public void loadView(BaseView baseView) {mainContainer.removeAllViews();View child=baseView.getView();mainContainer.addView(child);child.startAnimation(AnimationUtils.loadAnimation(mainContainer.getContext(), R.anim.left_to_right));}
}

BaseView.java

package com.tsh.lottery.views;import android.content.Context;
import android.view.View;
/*** 主体View基类* @author taoshihan**/
public abstract class BaseView {public Context context;public BaseView(Context context) {this.context = context;}public abstract View getView();
}

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{public IndexView(Context context) {super(context);}@Overridepublic View getView() {TextView tv=new TextView(context);LayoutParams params=new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);tv.setLayoutParams(params);tv.setText("我是会员界面");return tv;}
}

MainActivity.java 管理容器

package com.tsh.lottery;import java.lang.reflect.Field;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.animation.AnimationUtils;
import android.widget.RelativeLayout;import com.tsh.lottery.views.BaseView;
import com.tsh.lottery.views.IndexView;
import com.tsh.lottery.views.LoginView;
import com.tsh.lottery.views.MiddleManager;
import com.tsh.lottery.views.TitleManager;public class MainActivity extends Activity {private RelativeLayout mainContainer;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.il_main);getActionBar();setOverflowMenuQues();initTitle();initMiddle();}/*** 初始化主体*/public void initMiddle() {mainContainer=(RelativeLayout) findViewById(R.id.il_main);BaseView loginView=new LoginView(this);MiddleManager.getInstance().setMainContainer(mainContainer);MiddleManager.getInstance().loadView(loginView);}/*** 初始化标题*/private void initTitle() {TitleManager manager=TitleManager.getInstance();manager.init(this);manager.showUnloginTitle();}

[android] 切换界面的通用处理相关推荐

  1. Android典型界面设计(3)——访网易新闻实现双导航tab切换

    一.问题描述 双导航tab切换(底部区块+区域内头部导航),实现方案底部区域使用FragmentTabHost+Fragment, 区域内头部导航使用ViewPager+Fragment,可在之前博客 ...

  2. Android模仿QQ的左右滑动切换界面和下拉更新的效果

    转自http://www.linuxidc.com/Linux/2012-08/67207.htm 主布局main.xml <?xml version="1.0" encod ...

  3. android 界面切换监听,Android切换页面--setContentView

    setContentView 一般切换页面,通过Intent,startActivity可以实现,但系统创建Activity是非常耗时的,如果对切换画面时间有要求,只能用setContentView在 ...

  4. Android 应用界面设计

    与 iOS 相比,Android 系统界面存在各种不协调,应用界面本身缺乏统一的规范.虽然 Android 的开放性为应用的自主发挥带来了最大的可能性,但如果系统本身能够提供标准的范例,也未必是一件坏 ...

  5. android用户引导页,android欢迎界面引导页

    android欢迎界面是所有程序开始的一个简短的自我介绍,让用户能够通过简单的描述和图片信息更好的了解软件,对用户体验效果非常的重要.这里我会使用VIewPager做一个欢迎界面. 1设计背景图片 根 ...

  6. Android App界面和流畅度优化

    Android App界面和流畅度优化 所谓界面和流畅度优化,就是尽可能多地消除用户可直接感知的.影响用户操作体验的bug 1.人为在UI线程中做轻微耗时操作,导致UI线程卡顿 人为避免一切耗时操作 ...

  7. android标签切换卡,Android切换卡TabWidget用法示例

    本文实例讲述了Android切换卡TabWidget用法.分享给大家供大家参考,具体如下: Tab选项卡类似与电话本的界面,通过多个标签切换不同的内容,要实现这个效果,首先要知道TabHost,它是一 ...

  8. 关于(TabHost),(Button配合Fragment),(Menu)这三种常见的切换界面手法分析...

    前言 作为一个读者变成一个写技术文章的作者,我决定坚持还是写一些简单实用的文章(毕竟理论太高深,也许看的人很蛋疼....我也相信如果有兴趣深入研究,必然会自己找百度的),好了言归真转. 主题内容 在我 ...

  9. Android 动态界面开发框架 Tangram 使用完整教程

    阅读本文大概需要20分钟 熟悉阿里出品的vlayout的读者都知道,vlayout极大地扩展了RecyclerView的LayoutManager,从而为RecyclerView提供了一组布局.使用该 ...

  10. QT实现滑动切换界面,ARM/Linux触屏滑动切换界面,切换Qwidget

    QT实现滑动切换界面,触屏滑动切换界面 实现思想 实现过程 完整代码 实现思想 项目中要用到ARM,要求手势滑动能够切屏,首先我们想到使用 QGestureEvent,但使用起来比较麻烦,并且个人了解 ...

最新文章

  1. python 基础命令-Python unittest第一篇:基础入门+命令行编译
  2. PHP的composer的快速源
  3. Python DataFrame导出CSV、数据库
  4. 一个轻量级javascript框架的设计模式
  5. windows下安装qt4.7,编译hello QT 成功。
  6. 利用thread和sleep生成字符串的伪随机序列
  7. linux查看内存_【001】一文带你全面掌握Linux系统体系结构
  8. 用指针实现对二维数组元素的访问
  9. android超大屏触摸设备,世界上最大的安卓Android平板电脑具有98英寸的屏幕
  10. 第十九周—c语言 电子词典项目
  11. Go 处理PCAP文件
  12. 目前常用计算机配置,电脑常见主要配置、参数
  13. 苹果MFI认证步骤汇总
  14. 基于proteus8的8086与8255控制8位数码管显示
  15. JSP使用Struts1提交中文表单时乱码,字符编码问题
  16. 2015年看的52部电影计划
  17. 使用scrapy 框架来抓取100部美剧的信息
  18. 不错嘛(lsp专用)
  19. uefi装完系统后无法引导_uefi gpt安装win7启动不了如何解决_uefi gpt装win7后无法启动怎么办...
  20. TrackingMore API C# 调用示例

热门文章

  1. 二十一天学通C#:.NET中文件与文件夹的操作
  2. python模块:array数组模块
  3. 蓝桥杯2015年第六届C/C++B组第六题-加法变乘法
  4. 关于require()和export引入依赖的区别
  5. python基础 网络编程
  6. 数据库事务的四大特性以及事务的隔离级别-与-Spring事务传播机制隔离级别
  7. git报错error: src refspec refs/heads/master does not match any.
  8. 【数学建模】day05-微分方程建模
  9. Eclipse开启或取消快速导航栏(toggle breadcrumb)
  10. 关于前端惰性加载(jquery_lazyload)的使用和原理分析