开发Android知乎日报(二)BaseActivity简单设计

这里从头开始设计一个简单的BaseActivity
虽然是简单的版本,但是目的都是一样的,都是为了让开发更加容易。
本项目没有使用架构,为的是让新手能从,一般的流程开始学期,能更好的理解如何开发一个简单的Android应用。
一般Activity会保存一个Context对象mContext。这个变量名属于约定。建议使用这个。
一般情况下一个Activity的流程会有2个方法.这里使用abstract确保每个子类的处理都是一样的。

    /**
     * 初始化视图
     */
    protected abstract void initView() ;

    /**
     * 业务逻辑
     */
    public abstract void initData();

这里为了方便引用布局,封装了一个获取布局id的方法,子类直接通过该方法返回布局。

在Activity里面会有很多页面的跳转。这里简单封装了两个跳转方法,一个是不传值 一个是传值的。

这里只是简单的写了几个方法而已,前期可以简单封装一下,后期可以根据具体项目需求,添加功能。这里正常会封装一个Activity管理类,但是为了让项目尽量的保持简洁,一切都是去掉了。
下面给出第一个最简单的封装类

package com.iscoding.demo.zhihu.base;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

public abstract class BaseActivity extends AppCompatActivity {

    protected Context mContext;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContext = this;
        //设置布局 绑定布局
        setContentView(getLayoutId());
        initView();
        initData();
    }

    /**
     * 加载Layout
     */
    protected abstract int getLayoutId();

    /**
     * 初始化视图
     */
    protected abstract void initView() ;

    /**
     * 业务逻辑
     */
    public abstract void initData();


    public void openActivity(Class cls) {
        Intent i = new Intent(this, cls);
        startActivity(i);
    }

    protected void openActivity(Class cls, String key, String value) {
        Intent intent = new Intent(this, cls);
        intent.putExtra(key, value);
        startActivity(intent);
    }
 
}

封装好后,其他的Activity会直接使用里面的方法。

这里把Fragment的代码也封装好 ,直接写出来
package com.iscoding.demo.zhihu.base;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**

  • 类功能:封装好的BaseFragment
  • 公司:IsCoding工作室
  • 作者:IsCoding
  • 邮箱:[email protected] QQ:1400100300
  • 时间:2016/10/29 0029 14:05
    */

public abstract class BaseFragment extends Fragment {

protected Context mContext;
protected View rootView;// 缓存Fragment view

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mContext = getActivity();
}

/**
 * 很多时候onCreateView会被调用,比如页面切换,如果已经初始化过的页面会重新初始化
 * 此处代码是为了实现程序复用添加的,避免重复调用onCreateView每次都要重新初始化控件
 * 此处代码直接封装好,子类直接使用initView就可以
 */
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    if (rootView == null) {
        // 初始化整体布局pull_list
        rootView = inflater.inflate(getLayoutId(), container, false); 
    } else {
        ViewGroup parent = (ViewGroup) rootView.getParent();
        if (parent != null) {
            parent.removeView(rootView);
        }
    }
    return rootView;
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    initView();
    initData();
}

protected abstract int getLayoutId();

protected abstract void initView();

protected abstract void initData();


//Base类一般会封装一些常用方法,方便子类继承和调用,共性的东西可以添加在这个位置
public void openActivity(Class pClass) {
    Intent intent = new Intent(mContext, pClass);
    startActivity(intent);
}

// Base类一般会封装一些常用方法,方便子类继承和调用,共性的东西可以添加在这个位置
public void openActivity(Class pClass, String name, String value) {
    Intent intent = new Intent(mContext, pClass);
    intent.putExtra(name, value);
    startActivity(intent);
}

}

你可能感兴趣的:(开发Android知乎日报(二)BaseActivity简单设计)