android 学习笔记 第一章 Activity

第一章 Activity

  1. 手动创建自己的 Activity。
    右键包,选择 NEW-Activiry-empty Activity。
    不要勾选 Generate Layout File(自动创建布局文件)与 Luncher Activity (将此活动作为项目的 主活动 )。

  2. 手动创建Activity 的 layout 文件。
    右击 res/layout 选择 layout source File ,创建。
    在 XML 文件中,引用 id ,需要用到 @id/button_1,
    注册 id , 需要用到 @ +id/button_1。
    然后在Activity 文件中,调用 setContentView(R.layout.first_layout) 使用布局文件。

  3. 在AndroidManifest 文件中注册。
    活动的声明放在 <application> 标签内,通过 <activity> 标签来进行活动注册。
    在 <activity> 中,name -> 指定注册哪一个活动,name 的属性为 .TestMyActivity 表示的是
    com.tad.test.TestMyActivity 。 因为最外层的 package属性指定了包名,因此这里可以省略。
    在 <activity> 标签内部添加标签 <intent-filter> 并在标签内添加
    <action android:name = "andriod.intent.action.MAIN",声明主活动。
    <category android:name = "android.intent.category.LUNCHER"。
    还可以用android:label 指定标题栏内容。

  4. 在活动使用 Toast 。
    使用 Toast 的 makeText() 方法,创建 Toast 对象,并用 show() 方法将其显示出来。
    makeText(),需要三个参数,分别是 Content 对象,打印的内容,以及出现时间的长短(使用Toast.LENGTH_SHORT,与Toast.LENGTH_LONG)。

  5. 在活动中使用menu.
    右击 res/menu ,新建 Menu resource file。
    在 <menu> 标签中,新建 <item> 标签并添加 id 和 title (菜单栏显示的名称)。
    一个 <item> 标签菜单栏的一个选项。
    在 activity 中重写 onCreateOptionsMenu()。
    可以使用 ctrl+o 重写方法。
    实现对菜单选项的注册。
    需要使用getMenuInflater().inflate(menu.xml,menu)。
    然后,需要定义菜单选项的实际意义,定义响应事件 ,重写onOptionsItemSelected方法,然后通过判断item.getItemID所获取的id对点击不同的菜单选项,响应事件。

  6. 使用finish(),可以结束活动。

  7. 使用 Intent 在活动中跳转。
    1)显示 Intent。
    Intent intent = new Intent(TestMyActivity.this, MainActivity.class); startActivity(intent);
    新建Intent 对象,传入自身content对象,然后第二个参数是需要打开的Activity 的 文件class。
    然后使用 startActivity(intent) 就可以打开新的 Activity。
    2)隐式 Intent。
    需要在 AndroidManifest.xml 文件中对定义的活动进行声明
    需要指定需要响应的 action 的字符串
    不必要指定 category 默认category 是 android.intent.category.DEFAULT
    Intent intent = new Intent("com.tad.activityTest.ACTION_START");
    可以通过 Intent 的 addCategory() 添加自己的 category。同时需要在AndroidManifest 文件中,
    进行category 的添加。
    <category android:name="com.tad.activityTest.MY_CATEGORY" />
    intent.addCategory("com.tad.activityTest.MY_CATEGORY");
    然后调用 startActivity(intent) 打开新的 Activity。
    startActivity(intent);
    3) 隐式 Intent 的其他应用 打开其他应用的 Activity。
    Intent.ACTION_VIEW 系统内置动作
    然后通过Uri 的 parse() 将网址即系为一个 Uri 对象,并用setData 方法将这个对象装在Intent对象里面。
    最后启动活动。
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("http://www.baidu.com"));
    startActivity(intent);
    当定义我们自己的应用可以响应的 action 时,注意data 的属性。
    例如:
    <data android:scheme="http" /> 协议为http
    拨打电话 协议为 tel
    Intent intent = new Intent(Intent.ACTION_DIAL);
    intent.setData(Uri.parse("tel:10086"));
    startActivity(intent);

  8. 使数据在活动中交互。
    1)将数据传递给下一个 Activity
    使用显示Intent
    通过intent 的 putExtra()方法,将数据进行封装。
    第一个参数为键,第二个为值
    String stringData = "Hello,I'am the testActivity!";
    Intent intent = new Intent(TestMyActivity.this, MainActivity.class);
    intent.putExtra("string_data", stringData);
    startActivity(intent);
    接受方需要通过 getIntent() 获取到 intent 实例。
    然后调用 Intent 的 getStringExtra()获得数据,参数为所需数据的 键
    Intent intent = getIntent();
    String stringData = intent.getStringExtra("string_data");
    Log.d(TAG, stringData);
    2)传递给下一个Activity数据,并获取下一个Activity 销毁时传回的数据。
    传输数据同上,需要将数据封装到一个 Intent 实例中去。
    从下一个活动中接受数据:
    使用 startActivityResult(),启动应用。
    第一个参数为传递的 Intent ,第二个参数为辨识码,用来分辨不同的数据返回源。
    Intent intent = new Intent(TestMyActivity.this, MainActivity.class);
    intent.putExtra("string_data", "Hello World!");
    startActivityForResult(intent , 1);
    因为使用 startActivityResult()启动的应用,所以,在下一个 Activity 销毁之后,会调
    用 onActivityResult()方法,重写此方法,然后获取数据即可。
    @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode){ case 1: if(resultCode == RESULT_OK){ String returnData = data.getStringExtra("data_return"); Log.d(TAG, returnData); } break; default: } }
    被启用的活动应该用 setResult() 返回数据。
    第一个参数为处理结果,第二个为数据。
    setResult(RESULT_OK,intent);

  9. 活动的生命周期

    Markdown
    activity 使用 oncreate 创建 activity(一般就是初始化资源,以及绑定操作)
    onStart (使 activity 可见)
    onResume( activity 已经可见)
    onPause(activity 暂停,保存属性,还是处于可见状态)
    onStop(不可见,部分属性保留)
    onDestory (资源释放)
    onRestart(activity 重新启用)
    当下一个活动彻底将上一个活动遮盖时,会调用onPause和onStop 方法,当下一个活动结束,重新回到上一个活动时,将会调用onRestart 回到 调用 onCreate 之后,然后调用onstart与onresume会带活动栈顶部。
    当下一个活动未将上一个活动彻底遮掩时,将只会调用 onPause,下一个活动结束,则直接调用 onResume 重新回到任务栈顶部。

  10. 可以重写 onSaveInstanceState 方法,保存系统强行销毁的 activity 的数据。(例如处于onstop状态的activity 由于系统需要内存而强行销毁的 activity 中的数据)。

  11. 活动的启动模式。
    standrad 每次都会创建新的 activity
    singtop 当活动在栈顶时,不会创建新的实例
    singTask 栈中只会存在一个某 activity 的实例,调用时会将它上方的所有 activity 出栈
    singleInstance 会单独创建一个新的栈,然后将其放进去。当一个栈的所有 Activity 出栈之后,会显示另外一个栈的内容。

  12. 实际技巧
    1) 使用多态,让每一个activity 继承自己定义的类,然后在自己定义的类中打印Activity的名字可以获取当前所在的活动的名称
    2) 使用一个activity 类创建管理活。内部有一个 Activity的数组,每次创建活动的时候都将活动加到这个数组中出,然后每次销毁活动的时候将其从队列中移除。可以实现一键关闭所有activity' 的功能
    3)可以在需要传递数据的activity 活动中添加 startAction 的方法,传递数据进去这个方法,然后用这个方法启动这个活动。有效加强代码的易用性。

FirstCode 郭霖
整理:tadecather 2017.6.28

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

推荐阅读更多精彩内容