[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+ ...
随机推荐
- 关于C# 向TIM或者QQ自动发送中文消息【微信也是可用的】 附测试GIF中微信可用的 全新修订
在上一篇文章的代码 对于微信已失效 重新更新一边 效果图: 源代码 using System; using System.Runtime.InteropServices; using System.T ...
- [转]解读Unity中的CG编写Shader系列7——漫反射
如果前面几个系列文章的内容过于冗长缺乏趣味着实见谅,由于时间原因前面的混合部分还没有写完,等以后再补充,现在开始关于反射的内容了.折射与反射在物理世界中,光的反射与折射往往是同时存在的,光源由真空或者 ...
- 小记 Linux 之 Vim
小记 Linux 之 Vim 使用vim用来进行文本流查询,是非常重要的部分. 技巧一:使用 '#' 系统将列出文档相同字符,在代码时很重要. 技巧二:使用 ']I' 具体操作是先使用 ? 或 \ 进 ...
- rest-assured之验证响应数据(Verifying Response Data)
前面的文章中已经介绍过了如果获得响应数据,接下来我们来介绍一下应该如何来验证这些获得的响应数据,比如验证状态码.状态行.cookies.header.content-type以及body体. 1.验证 ...
- JAVA数据结构--快速排序
快排概念 快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出.在平均状况下,排序个项目要(大O符号)次比较.在 ...
- BZOJ - 3263 三维偏序
题意:定义元素为有序组(a,b,c),若存在x组(a_i,b_i,c_i)分别小于等于(a,b,c),则该元素的等级为x,求[0,n-1]等级的个数 cdq分治练手题,对a简单排序并去重,对b进行分治 ...
- Codeforces - 规律题 [占坑]
发现自己容易被卡水题,需要强行苟一下规律题 CF上并没有对应的tag,所以本题集大部分对应百毒搜索按顺序刷 本题集侧重于找规律的过程(不然做这些垃圾题有什么用) Codeforces - 1008C ...
- jenkins 重置构建历史
item = Jenkins.instance.getItemByFullName("98")//THIS WILL REMOVE ALL BUILD HISTORYitem.bu ...
- 用servlet校验密码
一.结果图 package Login; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connect ...
- mysql 查询json字段 json_extract (mysql 5.7及以上)
找第一层: SELECT * FROM tourists WHERE json_data->'$.weixinOpenId' = '299485886686868' 或者 SELECT * FR ...