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

前言

在上篇我已經(jīng)講了Activity基類的整體架構(gòu),大家感興趣的話可以參考
Activity基類詳解(2) — 架構(gòu)概述
這里我已經(jīng)著手將AppActivityAppFragActivity進(jìn)行整合,干掉了AppFragActivity,只留下AppActivity。下面就對(duì)AppActivity的基礎(chǔ)能力做一個(gè)簡(jiǎn)單的介紹

今天涉及以下內(nèi)容:
概述
使用說(shuō)明

  1. activity的注冊(cè)通用配置
  2. 隱藏標(biāo)題欄
  3. 控件初始化
    3.1 原始方式初始化控件
    3.2 利用 AppHelper 類初始化控件
    3.3 利用超類 SuperActivity 中的方法初始化控件
    3.4 利用 butterknife 初始化控件
  4. 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è)通用配置

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

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

</application>

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容