Activity基類詳解(3) — AppActivity基礎能力

前言

在上篇我已經講了Activity基類的整體架構,大家感興趣的話可以參考
Activity基類詳解(2) — 架構概述
這裏我已經着手將AppActivityAppFragActivity進行整合,幹掉了AppFragActivity,只留下AppActivity。下面就對AppActivity的基礎能力做一個簡單的介紹

今天涉及以下內容:
概述
使用說明

  1. activity的註冊通用配置
  2. 隱藏標題欄
  3. 控件初始化
    3.1 原始方式初始化控件
    3.2 利用 AppHelper 類初始化控件
    3.3 利用超類 SuperActivity 中的方法初始化控件
    3.4 利用 butterknife 初始化控件
  4. AppActivity中方法簡介
    4.1 控件值獲取,非空判斷、取值
    4.2 吐司
    4.3 控件初始化
    4.4 activity界面跳轉傳值
    4.5 系統dialog方法

概述

AppActivity作爲一個Activity基類,具備mvp模式,提供系列的狀態欄設置,控件初始化,非空判斷,常用界面跳轉傳值以及小部分系統級dialog的創建. 供activity繼承,提高activity的創建及編寫效率

使用說明

一. activity的註冊通用配置

activityMainfast.xml 中註冊的時候,通常會添加一些常用的配置屬性.例如你的 TestActivityMainfast.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 中設置整個apptheme,在 mainfast.xml 中將 apptheme 設置成 Theme.Design.NoActionBar即可,就像下面這樣:

<application
        //以上代碼省略
        //......
        android:theme="@style/Theme.Design.NoActionBar">
        
        //以下代碼省略
        //......

</application>

如果你只需要隱藏某個activity(如TestActivity),那麼你就不要改 mainfast.xml 中的 theme,只需要在 TestActivity 加載 xml 文件之前設置 AppActivityisNoTitle=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,今天的內容就介紹到這裏了,謝謝大家。

下篇 Activity基類詳解(4) — AppActivity簡單使用

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