[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();
    }
时间: 2024-10-07 10:32:36

[android] 切换界面的通用处理的相关文章

Android典型界面设计-访网易新闻实现双导航tab切换

一.问题描述 双导航tab切换(底部区块+区域内头部导航),实现方案底部区域使用FragmentTabHost+Fragment, 区域内头部导航使用ViewPager+Fragment,可在之前博客Android典型界面设计2(FragmentTabHost+Fragment实现底部tab切换)基础之上和Android典型界面设计1(ViewPage+Fragment实现区域顶部tab滑动切换)整合应用实现.查看两篇博客请点击:http://www.cnblogs.com/jerehedu/p

Android popwindow和fragment结合 左侧弹出下拉菜单 切换界面

延续上一篇文章Android 实现对话框圆角功能 ,在项目推进的过程当中,之前是已经用popwindow实现了点击按钮,在按钮下方弹出下拉菜单,实现了类似微信右上角加好友的功能,有兴趣的朋友,可以下载这个资源.回归主题,之前popwindow的使用,是固定在了登陆刚进去的界面,假设现在点击了左侧菜单的其他按钮,这就要求标题下方的内容必须更新所要显示的内容,一开始想都没想,就用了如下代码进行跳转: Intent intent = new Intent(Intent.ACTION_EDIT, nul

Android典型界面设计——FragmentTabHost+Fragment实现底部tab切换

Android典型界面设计——FragmentTabHost+Fragment实现底部tab切换 Android学习笔记:TabHost 和 FragmentTabHost

Android Activity界面切换添加动画特效

在Android 2.0之后有了overridePendingTransition() ,其中里面两个参数,一个是前一个activity的退出两一个activity的进入, Java代码   @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.SplashScreen); new Handler().postD

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

一.问题描述 双导航tab切换(底部区块+区域内头部导航),实现方案底部区域使用FragmentTabHost+Fragment, 区域内头部导航使用ViewPager+Fragment,可在之前博客Android典型界面设计2(FragmentTabHost+Fragment实现底部tab切换)基础之上和Android典型界面设计1(ViewPage+Fragment实现区域顶部tab滑动切换)整合应用实现.查看两篇博客请点击:http://www.cnblogs.com/jerehedu/p

Android典型界面设计——ViewPage+Fragment实现区域顶部tab滑动切换

一.问题描述 本系列将结合案例应用,陆续向大家介绍一些Android典型界面的设计,首先说说tab导航,导航分为一层和两层(底部区块+区域内头部导航),主要实现方案有RadioGroup+ViewPage+Fragment.Viewpager Indicator.ActionBar Tabs.FragmentTabHost+Fragment等,下面我们先采用RadioGroup+ViewPage+Fragment实现区域头部导航. 如图所示: 二.案例主要组件 1.先看一下MainActivit

带有ListView的界面无法通过手势左右滑动切换界面问题解决办法

问题描述: 在做OnGestureListener滑动切换窗口的时候,会遇到这样的问题.就是当界面中含有ListView的时候,OnGestureListener的左右触屏滑动就被ListView自己吃掉了. 问题分析: 在Android系统中,事件的分发和响应都按照一定的优先级仅仅有条的进行着.如果Activity中包含ListView那么系统的onTouchEvent事件会优先分发给ListView去处理,这时ListView的OnItemClickListener监听器会优先响应onTou

Android 设置界面修改为Iphone的tab菜单风格

好久没有写博客了!最近做了Android 设置的列表菜单风格改为Iphone的tab菜单风格的尝试!我知道,有许多朋友有自己的方式已经实现了这个界面风格的开发,今天大家来看看我的做法吧! 做这个开发前,首先要看看Android默认的设置列表菜单风格的实现!由 AndroidManifest.xml可以知道Settings这个Activity是我们关注的焦点!所以我们来到Settings.java来一探究竟,从中我们可以清除的知道他其实是一个PreferenceActivity,而Preferen

【原创】【ViewPager+Fragment】ViewPager中切换界面Fragment被销毁的问题分析

ViewPager中切换界面Fragment被销毁的问题分析 1.使用场景 ViewPager+Fragment实现界面切换,界面数量>=3 2.Fragment生命周期以及与Activity生命周期对比                    3.问题描述 按上图所说,只有当Fragment所Attached的Activity执行destroy的时候才会调用onDestoryView方法,然而现实是: 当界面由2切换到1的时候,3界面对应的Fragment实际上走了如下流程: 1 -->onP