当前位置: 首页 > news >正文

[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();
    }

 

 

 

转载于:https://www.cnblogs.com/taoshihan/p/5622807.html

相关文章:

  • traceroute程序
  • 组策略参考文档1-共享打印机
  • IP选路
  • thinkphp3.2与phpexcel带图片生成 完美案例
  • 动态选路协议
  • mysql中的字符集
  • UDP
  • 广播和多播
  • DNS域名系统
  • Docker创建支持php服务的镜像
  • TCP简述
  • Linux NFS服务器的安装与配置
  • centos6.5安装单实例mysql
  • ssh 服务端安全配置
  • 项目中的sql语句涉及到取集合时(即in(...))的用法foreach
  • [译]前端离线指南(上)
  • 《剑指offer》分解让复杂问题更简单
  • 【React系列】如何构建React应用程序
  • CSS魔法堂:Absolute Positioning就这个样
  • Effective Java 笔记(一)
  • hadoop集群管理系统搭建规划说明
  • HTTP请求重发
  • IP路由与转发
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • PhantomJS 安装
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • vue 个人积累(使用工具,组件)
  • 第十八天-企业应用架构模式-基本模式
  • 构建工具 - 收藏集 - 掘金
  • 批量截取pdf文件
  • 新手搭建网站的主要流程
  • 移动端 h5开发相关内容总结(三)
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • python最赚钱的4个方向,你最心动的是哪个?
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​queue --- 一个同步的队列类​
  • ​secrets --- 生成管理密码的安全随机数​
  • !!java web学习笔记(一到五)
  • #NOIP 2014#Day.2 T3 解方程
  • %check_box% in rails :coditions={:has_many , :through}
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (力扣)1314.矩阵区域和
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (南京观海微电子)——COF介绍
  • (转)大型网站的系统架构
  • *2 echo、printf、mkdir命令的应用
  • .describe() python_Python-Win32com-Excel