開發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
  • 郵箱: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);
}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。