前言
在上篇我已經講了Activity基類
的整體架構,大家感興趣的話可以參考
Activity基類詳解(2) — 架構概述
這裏我已經着手將AppActivity
和AppFragActivity
進行整合,幹掉了AppFragActivity
,只留下AppActivity
。下面就對AppActivity
的基礎能力做一個簡單的介紹
今天涉及以下內容:
概述
使用說明
- activity的註冊通用配置
- 隱藏標題欄
- 控件初始化
3.1 原始方式初始化控件
3.2 利用 AppHelper 類初始化控件
3.3 利用超類 SuperActivity 中的方法初始化控件
3.4 利用 butterknife 初始化控件 - AppActivity中方法簡介
4.1 控件值獲取,非空判斷、取值
4.2 吐司
4.3 控件初始化
4.4 activity界面跳轉傳值
4.5 系統dialog方法
概述
AppActivity
作爲一個Activity基類
,具備mvp模式
,提供系列的狀態欄設置
,控件初始化
,非空判斷
,常用界面跳轉傳值
以及小部分系統級dialog的創建
. 供activity繼承,提高activity的創建及編寫效率
使用說明
一. activity的註冊通用配置
activity
在 Mainfast.xml
中註冊的時候,通常會添加一些常用的配置屬性.例如你的 TestActivity
在 Mainfast.xml
中註冊的時候,可以這樣配置:
<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>
二. 隱藏標題欄
在app開發過程中,我們經常會隱藏標題欄。AppActivity
也提供了相關方法.。如果你要將整個app都設爲標題欄隱藏狀態,那麼你可以直接在 Mainfast.xml
中設置整個app
的 theme
,在 mainfast.xml
中將 app
的 theme
設置成 Theme.Design.NoActionBar
即可,就像下面這樣:
<application
//以上代碼省略
//......
android:theme="@style/Theme.Design.NoActionBar">
//以下代碼省略
//......
</application>
如果你只需要隱藏某個activity
(如TestActivity
),那麼你就不要改 mainfast.xml
中的 theme
,只需要在 TestActivity
加載 xml
文件之前設置 AppActivity
的 isNoTitle=true
即可,類似下面這樣:
public class TestActivity extends AppActivity {
@Override
public int getContentViewId() {
super.isNoTitle=true;//隱藏標題欄
return R.layout.activity_test;//activity_test爲TestActivity對應的xml文件
}
@Override
public void initData() {
}
@Override
public void setListener() {
}
}
三. 控件初始化
在 TestActivity
繼承 AppActivity
以後,TestActivity
界面的控件可以有多種初始化方式
3.1 原始方式初始化控件
TestActivity
作爲一個activity
,其界面中的控件具備最原始的初始化方式,以 TestActivity
界面的 TextView
爲例,你可以這樣初始化:
public class TestActivity extends AppActivity {
private TextView mTvTest;
@Override
public int getContentViewId() {
return R.layout.activity_test;//activity_test爲TestActivity對應的xml文件
}
@Override
public void initData() {
mTvTest=findViewById(R.id.textView);
}
@Override
public void setListener() {
}
}
3.2 利用 AppHelper 類初始化控件
AppHelper
作爲一個 activity
輔助類,其中有一個幫助初始化控件的方法.初始化如上 TestActivity
中的 mTvTest
時,你可以這樣:
//初始化mTvTest,其中 mContext 爲 TestActivity 實例
mTvTest=AppHelper.getInstance().getView(mContext,R.id.textView);
3.3 利用超類 SuperActivity 中的方法初始化控件
在 TestActivity
類中初始化 mTvTest
,你還可以這樣操作:
mTvTest=getView(R.id.textView);
3.4 利用 butterknife 初始化控件
AppActivity
中已經集成了 butterknife
,但是作爲一個庫引用的話,你仍需在自己的項目中引用 butterknife
庫,如你在自己項目的 app_module
下做 butterknife
庫的引用:
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
類中就可以進行愉快的初始化了:
public class TestActivity extends AppActivity {
@BindView(R.id.textView)
TextView mTvTest;
@Override
public int getContentViewId() {
return R.layout.activity_test;//activity_test爲TestActivity對應的xml文件
}
@Override
public void initData() {
mTvTest=findViewById(R.id.textView);
}
@Override
public void setListener() {
}
}
四. AppActivity中方法簡介
4.1 控件值獲取,非空判斷、取值
更多相關方法請查閱 AppHelper
類
/**獲取控件值**/
public String getTextOfView(TextView textView)
/**獲取非空字符串**/
public String getNotEmptyString(String str)
4.2 吐司
/**長吐司**/
public void showToast(String msg)
/**短吐司**/
public void showShortToast(String msg)
4.3 控件初始化
/**用於初始化控件的**/
protected <T> T getView(int rId)
4.4 activity界面跳轉傳值
更多相關方法請查閱 IntentHelper
類
/**無參界面跳轉**/
public void startAct(Class<?> cls)
/**含一個參數的界面跳轉**/
public void startParameterAct(Class<?> cls, String tag, Object parameter)
/**接收上一個界面傳過來的int**/
public int getIntParameter(String tag)
/**接收上一個界面傳過來的String**/
public String getStringParameter(String tag)
/**接收上一個界面傳過來的boolean**/
public boolean getBooleanParameter(String tag)
/**接收上一個界面傳過來的Bundle**/
public Bundle getBundleParameter(String tag)
/**接收上一個界面傳過來的對象,對象需要實現Serializable**/
public Serializable getSerializableObject(String tag)
/**接收上一個界面傳過來的對象,對象需要實現Parcelable**/
public Parcelable getParcelableObject(String tag)
/**傳一個int集合的界面跳轉**/
public void startIntegerListAct(Class<?> cls, String tag, List<Integer> list)
/**接收上一個界面傳過來的int集合**/
public List<Integer> getIntegerList(String tag)
/**傳一個String集合的界面跳轉**/
public void startStringListAct(Class<?> cls, String tag, List<String> list)
/**接收上一個界面傳過來的String集合**/
public List<String> getStringList(String tag)
/**傳一個object集合的界面跳轉,集合中的object需要實現Parcelable接口**/
public void startParcelableListAct(Class<?> cls, String tag, List<? extends Parcelable> list)
/**接收上一個界面傳過來的object集合,集合中的object需要實現Parcelable接口**/
public List<? extends Parcelable> getParcelableList(String tag)
/***
* 帶List<Serializable>list的界面跳轉
*
* @param cls
* @param bundle 若有攜帶有信息的bundle需要傳,則此處傳該bundle對象
* 若沒有bundle需要傳,則此處傳null就行
* @param tag
* @param list
*/
void startSerializableListAct(Class<?> cls, Bundle bundle, String tag, List<? extends Serializable> list);
/**用intent接收上一個界面傳過來的list<Serializable>list**/
List<? extends Serializable> getSerializableList(String tag);
4.5 系統dialog方法
/** 含有標題和內容的對話框 **/
protected AlertDialog showAlertDialog(String title, String message)
/** 含有標題、內容、兩個按鈕的對話框 **/
protected AlertDialog showAlertDialog(String title, String message, String positiveText,
DialogInterface.OnClickListener onPositiveClickListener, String negativeText,
DialogInterface.OnClickListener onNegativeClickListener)
/** 含有標題、內容、圖標、兩個按鈕的對話框 **/
protected AlertDialog showAlertDialog(String title, String message, int icon, String positiveText,
DialogInterface.OnClickListener onPositiveClickListener, String negativeText,
DialogInterface.OnClickListener onNegativeClickListener)
/** 進度條 */
protected ProgressDialog getProgressDialog(String title, String message, boolean cancelable)
ok,今天的內容就介紹到這裏了,謝謝大家。