[android] 切换界面的通用处理
实现不改变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() {
@Override
public void onClick(View v) {
showLoginTitle(); BaseView indexView=new IndexView(activity);
MiddleManager.getInstance().loadView(indexView);
}
});
//退出按钮
title_unlogin_btn.setOnClickListener(new OnClickListener() {
@Override
public 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);
}
@Override
public 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;
@Override
protected 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] 切换界面的通用处理的更多相关文章
- [android] 切换界面的问题
1. 界面重复创建的问题 2. 中间容器每次切换,都会清空容器中的子对象问题 3. 点击返回键的处理 解决重复创建的问题: 传递Class字节码对象,利用泛型来规定对象 判断界面是否存在,如果存在重复 ...
- 实现了在android实现左右滑动切换界面的效果
这是实现了在android实现左右滑动切换界面的效果,该效果的源码下载,请到源码天堂下载吧,喜欢的朋友可以研究一下. 布局文件 <?xml version="1.0" enc ...
- Android典型界面设计(3)——访网易新闻实现双导航tab切换
一.问题描述 双导航tab切换(底部区块+区域内头部导航),实现方案底部区域使用FragmentTabHost+Fragment, 区域内头部导航使用ViewPager+Fragment,可在之前博客 ...
- Android典型界面设计-访网易新闻实现双导航tab切换
一.问题描述 双导航tab切换(底部区块+区域内头部导航),实现方案底部区域使用FragmentTabHost+Fragment, 区域内头部导航使用ViewPager+Fragment,可在之前博客 ...
- Android典型界面设计——ViewPage+Fragment实现区域顶部tab滑动切换
一.问题描写叙述 本系列将结合案例应用,陆续向大家介绍一些Android典型界面的设计,首先说说tab导航,导航分为一层和两层(底部区块+区域内头部导航).主要实现方案有RadioGroup+View ...
- (转载)Android引导界面实现
Android引导界面实现 Android 2014-07-10 14:47:36 发布 您的评价: 4.0 收藏 3收藏 ViewPager类提供了多界面切换的新效果,是 ...
- jquery 仿手机屏幕切换界面效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【原创】【ViewPager+Fragment】ViewPager中切换界面Fragment被销毁的问题分析
ViewPager中切换界面Fragment被销毁的问题分析 1.使用场景 ViewPager+Fragment实现界面切换,界面数量>=3 2.Fragment生命周期以及与Activ ...
- 转载【ViewPager+Fragment】ViewPager中切换界面Fragment被销毁的问题分析
ViewPager中切换界面Fragment被销毁的问题分析 原文链接 http://www.cnblogs.com/monodin/p/3866441.html 1.使用场景 ViewPager+ ...
随机推荐
- 1.css介绍
CSS介绍 我们为什么需要CSS? 使用css的目的就是让网页具有美观一致的页面,另外一个最重要的原因是内容与格式分离 在没有CSS之前,我们想要修改HTML元素的样式需要为每个HTML元素单独定义样 ...
- “全栈2019”Java第三十四章:可变参数列表
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- bzoj 2780: [Spoj]8093 Sevenk Love Oimaster(广义SAM)
题目大意:给出n个原串,再给出m个查询串.求每个查询串出现在了多少原串中. 题解 直接对原串建一个广义SAM,然后把每一个原串放到SAM上跑一跑,记录一下每一个状态属于多少个原串,用$size$表示. ...
- shell的算术运算
变量的数值计算方法大致有双括号 (()), expr, bc, $[ ] 例子1 注意:2**3表示2的3次方,a++表示先输出a自身的值,然后进行++的运算: --a表示先进行--的运算,然后再输 ...
- jmeter聚合报告详解
聚合报告(aggregate report) 对于每个请求,它统计响应信息并提供请求数,平均值,最大,最小值,错误率,大约吞吐量(以请求数/秒为单位)和以kb/秒为单位的吞吐量. 吞吐量是以取样目标点 ...
- 现代 JavaScript 框架存在的主要原因
简评:现代 JavaScript 框架的出现最主要是解决哪个问题?这篇文章很好的解释了这个问题. 我见过许多人盲目地使用像 React,Angular 或 Vue.js 这样的现代框架.这些框架提供了 ...
- autokeras 在windows10下的安装与使用
注意:autokeras只适用于python3.6 先打开命令行(cmd), 输入 python --version 查看python版本,是否需要降级和升级. 降级的命令如下: conda inst ...
- dubbo核心流程一览
整体设计 图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI. Serv ...
- python迭代、可迭代对象、迭代器及生成器
迭代 通常意义上的迭代是指:重复执行一系列运算,从前面的量依次推出后面的量的过程,每一次迭代的结果,会作为下一次迭代的初始值. 在c.c++.java等编程语言中的for循环语句,就是一个迭代过程,例 ...
- Linux and Shell 实用命令
-name '*.jar' -printf '%p:' ### 查看CPU使用率 mpstat -P ALL