這里從頭開始設計一個簡單的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
- 郵箱:iscoding@126.com 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);
}
}