IBase

Config

INumberConfig

	// 0 - 12 數字
	public static final int ZERO = 0;
    public static final int ONE = 1;
    public static final int TWO = 2;
    public static final int THREE = 3;
    public static final int FOUR = 4;
    public static final int FIVE = 5;
    public static final int SIX = 6;
    public static final int SEVEN = 7;
    public static final int EIGHT = 8;
    public static final int NINE = 9;
    public static final int TEN = 10;
    public static final int ELEVEN = 11;
    public static final int TWELVE = 12;

	// Activity 和 Fragment,防止多次點擊重複跳轉Activity
	// 重複點擊的時間間隔
    public static final int CLICK_INTERVAL = 500;

Application

IBaseApplication

1、繼承的是 MultiDexApplication,
如果您繼承 IBaseApplication 有問題,
請在 build.gradle 添加
implementation "com.android.support:multidex:1.0.3"

2、繼承 IBaseApplication 必須重寫 getLogUtils(),
如果您不用記錄異常日誌,可設置返回值爲 null,
如果您要記錄日誌,請新建 class 並繼承 ILogUtils

IAppCrashHandler

用來捕捉程序異常

// 在您的Application的onCreate方法裏調用
// getLogUtils() 返回值爲 ILogUtils
IAppCrashHandler.getInstance(getLogUtils()).init(getApplicationContext());

Activity

IBaseAppCompatActivity

繼承 IBaseAppCompatActivity 必須重寫 getContentLayoutId()。

// 在super.onCreate(savedInstanceState);後調用
initWidows(Bundle savedInstanceState)

// 在initWidows(savedInstanceState);後調用
// 返回爲false時,finish當前Activity
boolean initArgs(Intent intent)

// 在setContentView(getContentLayoutId());後調用
initBefore(Bundle savedInstanceState)

// 在initBefore(savedInstanceState);後調用
initWidget()

// 在initWidget();後調用
initData()

// 防止多次點擊重複跳轉Activity可使用下面方法跳轉
// 跳轉Activity,clz要跳轉的Activity,bundle傳至Activity的參數
startActivity(Class clz)
startActivity(Class clz, Bundle bundle)
startActivityForResult(Class clz, int requestCode)
startActivityForResult(Class clz, Bundle bundle, int requestCode)

IActivityContainer

如果您的 Activity 繼承的是 IBaseAppCompatActivity,
IBaseAppCompatActivity 已經在 onCreate 調用了 addActivity,
在 onDestroy 調用了 removeActivity,請不要重複調用。

// 添加Activity
IActivityContainer.getInstance().addActivity(Activity);

// 移除Activity
IActivityContainer.getInstance().removeActivity(Activity);

// 移除最後一個Activity
IActivityContainer.getInstance().removeLastActivity(Activity);

// finish所有Activity
IActivityContainer.getInstance().finishAllActivity();

Fragment

IBaseFragmentApp

IBaseFragmentApp 繼承的是 android.app.Fragment,
繼承 IBaseFragmentApp 必須重寫 getContentLayoutId()。

// 在onAttach(context)裏調用
initArgs(Bundle bundle)

// 在onCreateView(inflater, container, savedInstanceState)裏
// 初始化 View root 後調用
initBefore(Bundle savedInstanceState)

// 在onCreateView(inflater, container, savedInstanceState)裏
// 在initBefore(savedInstanceState);後調用
initWidget(View root)

// 在onViewCreated(view, savedInstanceState)裏調用
// 如果您用了kotlin,要對控件進行操作,請在此方法裏操作
initKotlinWidget()

// 在onViewCreated(view, savedInstanceState)裏
// 在initKotlinWidget();後調用,只會觸發一次
onFirstInit()

// 在onViewCreated(view, savedInstanceState)裏
// 在onFirstInit();後調用,可能會觸發多次
initData();

// 返回按鍵觸發時調用
// 返回True代表我已處理返回邏輯,Activity不用自己finish
// 返回False代表我沒有處理邏輯,Activity自己走自己的邏輯
boolean onBackPressed()

// 防止多次點擊重複跳轉Activity可使用下面方法跳轉
// 跳轉Activity,clz要跳轉的Activity,bundle傳至Activity的參數
startActivity(Class clz)
startActivity(Class clz, Bundle bundle)
startActivityForResult(Class clz, int requestCode)
startActivityForResult(Class clz, Bundle bundle, int requestCode)

IBaseFragmentV4

IBaseFragmentV4 同 IBaseFragmentApp 一樣,
只不過繼承的是 android.support.v4.app.Fragment,
繼承 IBaseFragmentV4 必須重寫 getContentLayoutId()。

Listener

IOnTextChangedListener

TextView 文字改變監聽

textView.addTextChangedListener(new IOnTextChangedListener(){
	// 根據需要重寫方法
})

Widget

IAlertDialog

// alertType: 不填默認爲 IAlertDialog.CANCEL_TYPE
// IAlertDialog.CANCEL_TYPE 對話框有取消和確定按鈕
// IAlertDialog.CONFIRM_TYPE 對話框只有確定按鈕
new IAlertDialog(Context context, int alertType)
	// 點擊返回鍵是否取消對話框,默認true:取消對話框
	.setOnBackClickCancelable(boolean)
	// 設置標題,可以是字符串,也可以是資源Id
	.setTitleText(String or @StringRes int)
	// 設置標題文字顏色
	.setTitleTextColor(int)
	// 設置內容
	.setContentText(String or @StringRes int)
	// 設置內容文字顏色
	.setContentTextColor(int)
	// 設置取消按鈕文字
	.setCancelText(String or @StringRes int)
	// 設置取消按鈕文字顏色
	.setCancelTextColor(int)
	// 設置確定按鈕文字
	.setConfirmText(String or @StringRes int)
	// 設置確定按鈕文字顏色
	.setConfirmTextColor(int)
	// 設置取消按鈕點擊事件
	.setCancelClickListener(IAlertDialog.OnDialogClickListener)
	// 設置確定按鈕點擊事件
	.setConfirmClickListener(IAlertDialog.OnDialogClickListener)
	// 必須調用show()纔會顯示
	.show();

Utils

IDisplayUtils

// 獲取屏幕寬度
IDisplayUtils.getScreenWidth(Context);

// 獲取屏幕高度
IDisplayUtils.getScreenHeight(Context);

// 獲取狀態欄的高度
IDisplayUtils.getStatusBarHeight(Context);

// px sp轉換
IDisplayUtils.px2sp(Context, float);

// sp px轉換
IDisplayUtils.sp2px(Context, float);

// px dp轉換
IDisplayUtils.px2dp(Context, float);

// dp px轉換
IDisplayUtils.dp2px(Context, float);

IKeyboardUtils

// 顯示鍵盤
IKeyboardUtils.showKeyboard(View);

// 隱藏鍵盤
IKeyboardUtils.hideKeyboard(View);

// 如果顯示則隱藏,如果隱藏則顯示
IKeyboardUtils.toggleSoftInput(View);

// 如果沒有彈出或隱藏鍵盤,可嘗試如下方式
view.postDelayed(new Runnable() {
	@Override
	public void run() {
		// 顯示鍵盤 or 隱藏鍵盤
	}
}, 100);

ILogUtils

繼承 ILogUtils,必須重寫以下方法:
String getTag():打印時用到的Tag;
String getLogSavePath():日誌保存目錄,絕對目錄;
boolean getLogSwitch():日誌開關;
boolean getLogEncrypt():是否加密日誌;
String encode(String):加密日誌;
String decode(String):解密日誌。

// 讀取日誌
String redLog(String filePath);

// 寫入日誌
writeLog(String msg);
writeLog(Throwable throwable);
writeLog(String msg, Throwable throwable);

例:

public class LogUtils extends ILogUtils {

    private static LogUtils instance = null;

    private LogUtils() { }

    public static LogUtils getInstance() {
        if (instance == null){
            synchronized (LogUtils.class){
                if (instance == null){
                    instance = new LogUtils();
                }
            }
        }
        return instance;
    }

    @Override
    public String getTag() {
        return "LOG";
    }

    @Override
    public String getLogSavePath() {
        String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Log/";
        File file = new File(path);
        if (!file.exists()) {
            if (!file.mkdirs()) {
                Log.e(getTag(), "getLogSavePath: 創建文件夾失敗");
            }
        }
        return path;
    }

    @Override
    protected boolean getLogSwitch() {
    	// true 記錄日誌,false 不記錄日誌
        return true;
    }

    @Override
    protected boolean getLogEncrypt() {
    	// true 加密日誌,false 不加密日誌
        return false;
    }

    @Override
    protected String decode(String string) {
        // 根據自己加密方式進行解密
	    // 返回解密後的日誌
        return string;
    }

    @Override
    protected String encode(String string) {
	    // 根據自己需要的加密方式進行加密
    	// 返回解密後的日誌
        return string;
    }
}

IMD5Utils

// MD5加密,返回加密後的字符串
String encodeString = IMD5Utils.getMD5Code(String);

IPermissionUtils

// 檢查App是否已授予某些權限
// 返回未授予權限的數組
String[] permissions = IPermissionUtils.checkPermissions(Context, String...);

// 檢查App是否已授予指定權限
// 返回true:授予,false:未授予
checkPermissions(Context, String);

ISharedPreferencesUtils

繼承 ISharedPreferencesUtils,必須重寫以下方法:
String getFileName()
Context getContext()

// 添加數據
// key String
// value String/int/boolean/float/long/Set<String>
putValue(key, value);

// 查詢數據
// key String
// defaultValue String/int/boolean/float/long/Set<String>
// defaultValue 默認數據,返回值同默認數據類型
getValue(key, defaultValue);

// 移除key值對應的值
remove(key);

// 清除所有數據
clear();

// 查詢key是否已經存在
boolean contains(key);

// 返回所有的鍵值對
Map<String, ?> getAll();

IStatusBarUtil

// 設置狀態欄顏色
IStatusBarUtil.setStatusBarColor(Activity, int);

// 狀態欄文字爲黑色
IStatusBarUtil.setLightMode(Activity);

// 狀態欄文字爲白色
IStatusBarUtil.setDarkMode(Activity);

IToastUtils

// 顯示在底部的Toast
// showTime不填,默認2000
IToastUtils.showToastBottom(Context, String or @StringRes int, int showTime);

// 顯示在中間的Toast
// showTime不填,默認2000
IToastUtils.showToastCenter(Context, String or @StringRes int, int showTime);

// 自定義顯示位置
// gravity-eg:Gravity.BOTTOM
// showTime不填,默認2000
IToastUtils.showToast(Context, int gravity, String or @StringRes int, int showTime);

// 顯示在中間大Toast
// flagRes 圖標資源
// showTime不填,默認2000
IToastUtils.showBigToastCenter(Context, String or @StringRes int, int flagRes, int showTime);

IValidateUtils

// 判斷手機號碼是否正確
IValidateUtils.checkMobile(String);

// 判斷郵箱是否正確
IValidateUtils.checkEmail(String);

// 判斷http/https地址是否正確
IValidateUtils.checkHttpUrl(String);

// 檢查字符在某個區間
// min 最小長度(包含)
// max 最大長度(包含)
IValidateUtils.checkLengthInterval(String, int min, int max);

Adapter

IBaseAdapter

IBaseAdapter 繼承的是 BaseAdapter
例:

public class TestAdapter extends IBaseAdapter<String> {

    public TestAdapter(Context context) {
        super(context);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    	// 實現自己的ItemView
    	if(convertView == null){
    		convertView = 加載自己的 ItemView
    	}
        return convertView;
    }
}
TestAdapter mAdapter = new TestAdapter(this);
listView.setAdapter(mAdapter);
// 添加數據到最前面
mAdapter.addFirst(String);
// 添加數據到最後面
mAdapter.add(String);
// 添加一個集合的數據
mAdapter.addAll(Collection<String>);
// 設置指定下標position的數據
mAdapter.set(int position, String);
// 異常指定下標position數據
mAdapter.removeAtIndex(int position);
// 清空數據
mAdapter.clear()
// 注意以上數據操作均沒有調用 notifyDataSetChanged()
// 請按自己需要調用
mAdapter.notifyDataSetChanged();

IBaseRecyclerAdapter

IBaseRecyclerAdapter 繼承的是 RecyclerView.Adapter
例:

public class TestAdapter extends IBaseRecyclerAdapter<String> {

    public TestAdapter(Context context) {
        super(context);
    }

    @Override
    public int getContentItemViewType(int position) {
        return R.layout.自己的ItemView Layout;
    }

    @Override
    public IBaseViewHolder<String> createContentViewHolder(View root) {
        return new Holder(root);
    }

    private class Holder extends IBaseViewHolder<String> {

        private TextView view;

        Holder(View itemView) {
            super(itemView);
            view= $(R.id.自己命名的View id);
        }

        @Override
        public void onBind(String poetry, int position) {
            view.setText(poetry);
        }
    }
}
TestAdapter mAdapter = new TestAdapter(this);
recyclerView.setAdapter(mAdapter);
// 添加頭部,自己新建Class繼承IBaseRecyclerAdapter.ItemView
mAdapter.addHeader(ItemView)
// 添加底部,自己新建Class繼承IBaseRecyclerAdapter.ItemView
mAdapter.addFooter(ItemView)
// 根據下標index獲取頭部
ItemView header = mAdapter.getHeader(int index);
// 根據下標index獲取底部
ItemView footer = mAdapter.getFooter(int index);
// 移除所有頭部
mAdapter.removeAllHeader();
// 移除所有底部
mAdapter.removeAllFooter();
// 獲取頭部集合大小
mAdapter.getHeaderCount();
// 獲取底部集合大小
mAdapter.getFooterCount();
// 獲取頭部集合
LinkedList<ItemView> headers = mAdapter.getHeaders();
// 獲取底部集合
LinkedList<ItemView> footers = mAdapter.getFooters();
// 移除指定頭部數據,或指定下標index的頭部數據
mAdapter.removeHeader(ItemView or int index);
// 移除指定底部數據,或指定下標indext的底部數據
mAdapter.removeFooter(ItemView or int index);
// 獲取數據集合
LinkedList<String> datas =  mAdapter.getDataList();
// 獲取數據集合大小
mAdapter.getCount();
// 根據下標index獲取數據
mAdapter.getItem(int index);
// 添加數據到最前面
mAdapter.addFirst(String);
// 添加數據到最後面
mAdapter.add(String);
// 添加一個集合的數據
mAdapter.add(Collection<String>);
// 移除指定數據,或指定下標position的數據
mAdapter.remove(String or int position)
// 清空數據
mAdapter.clear();
// 是否需要加載更多
// loadMoreIsLast 不填默認爲true,加載更多顯示在底部下面
// loadMoreIsLast 設置爲false,加載更多顯示在底部上面數據下面
// loadMoreHolder 不填爲默認加載佈局
// loadMoreHolder可自定義,自己新建Class繼承IBaseLoadMoreHolder
// listener 加載更多處理事件
mAdapter.needLoadMore(boolean loadMoreIsLast, 
	RecyclerView recyclerView,
	BaseLoadMoreHolder loadMoreHolder, 
	OnLoadMoreListener listener);
// 停止加載更多(沒有更多了)
mAdapter.loadMoreStop();
// 加載更多失敗
mAdapter.loadMoreError();
// 設置是否需要刷新數據,默認爲true
// 在操作數據增刪改時刷新數據顯示
mAdapter.setNotifyOnChange(boolean);
// 數據Item點擊事件
mAdapter.setOnItemClickListener(OnItemClickListener);
// 數據Item長按事件
mAdapter.setOnItemLongClickListener(OnItemLongClickListener);
// 
mAdapter.obtainGridSpanSizeLookUp(int maxCount)

IBase

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章