前言
在上篇我已經(jīng)講了Activity基類的整體架構(gòu),大家感興趣的話可以參考
Activity基類詳解(2) — 架構(gòu)概述
這里我已經(jīng)著手將AppActivity和AppFragActivity進(jìn)行整合,干掉了AppFragActivity,只留下AppActivity。下面就對(duì)AppActivity的基礎(chǔ)能力做一個(gè)簡(jiǎn)單的介紹
今天涉及以下內(nèi)容:
概述
使用說(shuō)明
- activity的注冊(cè)通用配置
- 隱藏標(biāo)題欄
- 控件初始化
3.1 原始方式初始化控件
3.2 利用 AppHelper 類初始化控件
3.3 利用超類 SuperActivity 中的方法初始化控件
3.4 利用 butterknife 初始化控件 - AppActivity中方法簡(jiǎn)介
4.1 控件值獲取,非空判斷、取值
4.2 吐司
4.3 控件初始化
4.4 activity界面跳轉(zhuǎn)傳值
4.5 系統(tǒng)dialog方法
概述
AppActivity作為一個(gè)Activity基類,具備mvp模式,提供系列的狀態(tài)欄設(shè)置,控件初始化,非空判斷,常用界面跳轉(zhuǎn)傳值以及小部分系統(tǒng)級(jí)dialog的創(chuàng)建. 供activity繼承,提高activity的創(chuàng)建及編寫效率
使用說(shuō)明
一. activity的注冊(cè)通用配置
activity在 Mainfast.xml 中注冊(cè)的時(shí)候,通常會(huì)添加一些常用的配置屬性.例如你的 TestActivity 在 Mainfast.xml 中注冊(cè)的時(shí)候,可以這樣配置:
<application
//以下代碼省略
//......
>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".TestActivity"
android:configChanges="keyboardHidden|orientation|screenSize|touchscreen"
android:screenOrientation="portrait" />
</application>
二. 隱藏標(biāo)題欄
在app開(kāi)發(fā)過(guò)程中,我們經(jīng)常會(huì)隱藏標(biāo)題欄。AppActivity也提供了相關(guān)方法.。如果你要將整個(gè)app都設(shè)為標(biāo)題欄隱藏狀態(tài),那么你可以直接在 Mainfast.xml 中設(shè)置整個(gè)app的 theme,在 mainfast.xml 中將 app 的 theme 設(shè)置成 Theme.Design.NoActionBar即可,就像下面這樣:
<application
//以上代碼省略
//......
android:theme="@style/Theme.Design.NoActionBar">
//以下代碼省略
//......
</application>
如果你只需要隱藏某個(gè)activity(如TestActivity),那么你就不要改 mainfast.xml 中的 theme,只需要在 TestActivity 加載 xml 文件之前設(shè)置 AppActivity 的 isNoTitle=true 即可,類似下面這樣:
public class TestActivity extends AppActivity {
@Override
public int getContentViewId() {
super.isNoTitle=true;//隱藏標(biāo)題欄
return R.layout.activity_test;//activity_test為TestActivity對(duì)應(yīng)的xml文件
}
@Override
public void initData() {
}
@Override
public void setListener() {
}
}
三. 控件初始化
在 TestActivity 繼承 AppActivity 以后,TestActivity界面的控件可以有多種初始化方式
3.1 原始方式初始化控件
TestActivity 作為一個(gè)activity,其界面中的控件具備最原始的初始化方式,以 TestActivity 界面的 TextView 為例,你可以這樣初始化:
public class TestActivity extends AppActivity {
private TextView mTvTest;
@Override
public int getContentViewId() {
return R.layout.activity_test;//activity_test為TestActivity對(duì)應(yīng)的xml文件
}
@Override
public void initData() {
mTvTest=findViewById(R.id.textView);
}
@Override
public void setListener() {
}
}
3.2 利用 AppHelper 類初始化控件
AppHelper作為一個(gè) activity輔助類,其中有一個(gè)幫助初始化控件的方法.初始化如上 TestActivity 中的 mTvTest 時(shí),你可以這樣:
//初始化mTvTest,其中 mContext 為 TestActivity 實(shí)例
mTvTest=AppHelper.getInstance().getView(mContext,R.id.textView);
3.3 利用超類 SuperActivity 中的方法初始化控件
在 TestActivity 類中初始化 mTvTest,你還可以這樣操作:
mTvTest=getView(R.id.textView);
3.4 利用 butterknife 初始化控件
AppActivity 中已經(jīng)集成了 butterknife,但是作為一個(gè)庫(kù)引用的話,你仍需在自己的項(xiàng)目中引用 butterknife 庫(kù),如你在自己項(xiàng)目的 app_module下做 butterknife 庫(kù)的引用:
android {
...
// Butterknife requires Java 8.
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'com.jakewharton:butterknife:10.1.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'
}
然后在你的 TestActivity 類中就可以進(jìn)行愉快的初始化了:
public class TestActivity extends AppActivity {
@BindView(R.id.textView)
TextView mTvTest;
@Override
public int getContentViewId() {
return R.layout.activity_test;//activity_test為TestActivity對(duì)應(yīng)的xml文件
}
@Override
public void initData() {
mTvTest=findViewById(R.id.textView);
}
@Override
public void setListener() {
}
}
四. AppActivity中方法簡(jiǎn)介
4.1 控件值獲取,非空判斷、取值
更多相關(guān)方法請(qǐng)查閱 AppHelper 類
/**獲取控件值**/
public String getTextOfView(TextView textView)
/**獲取非空字符串**/
public String getNotEmptyString(String str)
4.2 吐司
/**長(zhǎng)吐司**/
public void showToast(String msg)
/**短吐司**/
public void showShortToast(String msg)
4.3 控件初始化
/**用于初始化控件的**/
protected <T> T getView(int rId)
4.4 activity界面跳轉(zhuǎn)傳值
更多相關(guān)方法請(qǐng)查閱 IntentHelper 類
/**無(wú)參界面跳轉(zhuǎn)**/
public void startAct(Class<?> cls)
/**含一個(gè)參數(shù)的界面跳轉(zhuǎn)**/
public void startParameterAct(Class<?> cls, String tag, Object parameter)
/**接收上一個(gè)界面?zhèn)鬟^(guò)來(lái)的int**/
public int getIntParameter(String tag)
/**接收上一個(gè)界面?zhèn)鬟^(guò)來(lái)的String**/
public String getStringParameter(String tag)
/**接收上一個(gè)界面?zhèn)鬟^(guò)來(lái)的boolean**/
public boolean getBooleanParameter(String tag)
/**接收上一個(gè)界面?zhèn)鬟^(guò)來(lái)的Bundle**/
public Bundle getBundleParameter(String tag)
/**接收上一個(gè)界面?zhèn)鬟^(guò)來(lái)的對(duì)象,對(duì)象需要實(shí)現(xiàn)Serializable**/
public Serializable getSerializableObject(String tag)
/**接收上一個(gè)界面?zhèn)鬟^(guò)來(lái)的對(duì)象,對(duì)象需要實(shí)現(xiàn)Parcelable**/
public Parcelable getParcelableObject(String tag)
/**傳一個(gè)int集合的界面跳轉(zhuǎn)**/
public void startIntegerListAct(Class<?> cls, String tag, List<Integer> list)
/**接收上一個(gè)界面?zhèn)鬟^(guò)來(lái)的int集合**/
public List<Integer> getIntegerList(String tag)
/**傳一個(gè)String集合的界面跳轉(zhuǎn)**/
public void startStringListAct(Class<?> cls, String tag, List<String> list)
/**接收上一個(gè)界面?zhèn)鬟^(guò)來(lái)的String集合**/
public List<String> getStringList(String tag)
/**傳一個(gè)object集合的界面跳轉(zhuǎn),集合中的object需要實(shí)現(xiàn)Parcelable接口**/
public void startParcelableListAct(Class<?> cls, String tag, List<? extends Parcelable> list)
/**接收上一個(gè)界面?zhèn)鬟^(guò)來(lái)的object集合,集合中的object需要實(shí)現(xiàn)Parcelable接口**/
public List<? extends Parcelable> getParcelableList(String tag)
/***
* 帶List<Serializable>list的界面跳轉(zhuǎn)
*
* @param cls
* @param bundle 若有攜帶有信息的bundle需要傳,則此處傳該bundle對(duì)象
* 若沒(méi)有bundle需要傳,則此處傳null就行
* @param tag
* @param list
*/
void startSerializableListAct(Class<?> cls, Bundle bundle, String tag, List<? extends Serializable> list);
/**用intent接收上一個(gè)界面?zhèn)鬟^(guò)來(lái)的list<Serializable>list**/
List<? extends Serializable> getSerializableList(String tag);
4.5 系統(tǒng)dialog方法
/** 含有標(biāo)題和內(nèi)容的對(duì)話框 **/
protected AlertDialog showAlertDialog(String title, String message)
/** 含有標(biāo)題、內(nèi)容、兩個(gè)按鈕的對(duì)話框 **/
protected AlertDialog showAlertDialog(String title, String message, String positiveText,
DialogInterface.OnClickListener onPositiveClickListener, String negativeText,
DialogInterface.OnClickListener onNegativeClickListener)
/** 含有標(biāo)題、內(nèi)容、圖標(biāo)、兩個(gè)按鈕的對(duì)話框 **/
protected AlertDialog showAlertDialog(String title, String message, int icon, String positiveText,
DialogInterface.OnClickListener onPositiveClickListener, String negativeText,
DialogInterface.OnClickListener onNegativeClickListener)
/** 進(jìn)度條 */
protected ProgressDialog getProgressDialog(String title, String message, boolean cancelable)
ok,今天的內(nèi)容就介紹到這里了,謝謝大家。