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简单使用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容