第一行代码 第二章 Activity
来源:互联网 发布:淘宝店铺申请全球购 编辑:程序博客网 时间:2024/05/29 07:12
一、Activity基本概念
Activity 主要用于和用户进行交互。
所有的Activity都需要在Androidmanifest.xml文件中注册才能生效。通过activity标签对活动进行注册
Androidmanifest.xml文件内容:<activity android:name=".MainActivity"><!-- android:name 用来指定具体注册的是哪个活动 .MainActivity 是隐藏包名的缩写--><!-- intent-filter 这样配置表示这个活动是**主活动**--> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter></activity>
二、Activity的启动方式
显示Intent启动和隐式Intent启动
Intent:是Android程序中各个组件之间交互的一种方式;通过它可以实现各组件之间的数据传递,还可以指明当前组件想要执行的动作。
Intent(Context packageContext, Class<?> cls);
第一个参数,要求提供一个启动活动的上下文;
第二个参数,指定想要启动的目标活动
startActivity(),是专门用于启动活动的方法,它接收一个intent参数。
将构建好的Intent传人startActivity()方法就可以启动目标活动了。
1、显示启动
button1.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { Toast.makeText(MainActivity.this, "click", Toast.LENGTH_SHORT).show();/* 显式Intent 启动目标活动 表示在MainActivity这个活动中去启动SecodeActivity这个活动*/ Intent mIntent = new Intent(MainActivity.this,SecodeActivity.class); startActivity(mIntent); }});
扩展小知识
Activity继承于Context。this:表示当前对象。哪个类调用就是指向该对象。
类名.this(MainActivity.this):表示这个类对象(MainActivity对象)。当在内部类的方法中需要引用外部类时,就要用到这种写法;如果在内部类中直接使用this,则表示内部类本身。
MainActivity是一个外部类,View.OnClickListener是一个内部类,在内部类中使用外部类方法需要使用外部类名.this引用外部类的实例。
类名.class:返回的是这个类的Class对象
获取Class对象的方式通常有三种:
1、通过类名.class获取 ;
2、通过已经实例化的对象获取,getClass()方法获取;
3、通过Class.forName(“类的全名称”)获取,这种方法比较少见。
2、隐式启动
此方式并不明确的指出我们想要启动的活动,而是通过指定action和category等信息,交由系统分析这个Intent,从中选出最合适的活动去启动。
由于这种方式是交由系统来决定的,所以只要在系统中匹配到就可以启动该活动,故此方式可以启动第三方应用,也可以启动系统内置应用。
当系统匹配到多个应用时,会弹出选择提示框,用于用户选择启动哪个应用。
在Androidmanifest.xml文件中,通过activity标签下配置intent-filter标签的内容,就可以指定当前活动的action和category。
<activity android:name=".SecodeActivity"> <intent-filter> <action android:name="com.sky.activitytest.SECODE_ACTIVITY_ACTION"></action> <category android:name="android.intent.category.DEFAULT"></category> <category android:name="com.sky.activitytest.SECODE_ACTIVITY_CATRGORY"></category> </intent-filter></activity>/* 这里定义了可以响应SecodeActivity的action(com.sky.activitytest.SECODE_ACTIVITY_ACTION)和category(com.sky.activitytest.SECODE_ACTIVITY_CATRGORY)配置信息。*/
/* 只有当Intent中指定的action和category同时能够匹配Androidmanifest.xml中的action和category,这个活动才能响应。 android.intent.category.DEFAULT是一只默认的category,在调用startActivity()方法时会自动将这个category添加到Intent中。*/**每个Intent只能指定一个action,可以指定多个category**// 隐式Intent 启动活动Intent mIntent = new Intent("com.sky.activitytest.SECODE_ACTIVITY_ACTION");mIntent.addCategory("com.sky.activitytest.SECODE_ACTIVITY_CATRGORY");startActivity(mIntent);
三、activity之间传递数据 – Intent
http://blog.csdn.net/good__man/article/details/63812419
此链接有详细说明 《关于Activity之间传递数据的6种方式》
1、使用Inten的putExtra传递
2、使用Activity销毁时传递数据
3、使用SharedPreferences传递数据
4、使用静态变量传递数据
5、使用序列化对象Seriazable
1、向下一个活动传递数据:
使用intent.putExtra()方法来传递数据;该方法有两个接收参数:
第一个参数是键,用于启动的活动从这个键中取得值;
第二个参数是传递的数据。
intent传递的数据除了可以是整型、布尔型、字符串;还可以是bundle、自定义的对象(该对象需要通过serializable或者parcelable方式进行序列化)。
firstActivity代码片段:button1.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { Intent mIntent = new Intent(firstActivity.this, SecodeActivity.class); // 从firstActivity将数据(1111111)传递给SecodeActivity mIntent.putExtra("data", "1111111"); startActivity(mIntent); }});
SecodeActivity代码片段: Intent intent = getIntent(); // getData 就是从firstActivity传来的数据(1111111) String getData = intent.getStringExtra("data");
除了getStringExtra,还可以使用getIntExtra()、getBooleanExtra()、getSerializableExtra()、getBundleExtra()、getSharedPreferences()来获取数据;这主要是看从firstActivity中传递什么类型的数据来选择的。
2、返回数据给上一个活动:
要想实现这样的效果,需要在firstActivity中使用startActivityForResult()方法来启动SecodeActivity,而不再通过startActivity()方法。
startActivityForResult()方法有两个参数;
第一个参数是Intent,
第二个参数是请求码,用于在回调中判断数据的来源。
在SecodeActivity中返回时,先构建intent,用于传递数据,然后调用setResult()方法,最后调用finish()去销毁当前活动SecodeActivity。
setResult()方法有两个参数;
第一个参数一般只使用RESULT_OK或者RESULT_CANCELED,用于向上一个活动返回处理的结果;
第二个参数是Intent。
SecodeActivity在销毁后,才会回调上一个活动(firstActivity)的onActivityResult()方法。所以在onActivityResult()方法里面接收处理数据即可。
onActivityResult()方法有三个参数;
第一个参数是我们启动活动时出入的请求码,
第二个参数是返回数据时传入的处理结果,
第三个参数是返回的数据。
firstActivity代码片段:button1.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { // 传递数据,并接收上一个活动返回的数据 Intent mIntent = new Intent(firstActivity.this, SecodeActivity.class); mIntent.putExtra("data", "This data is from firstActivity"); startActivityForResult(mIntent,1); }});@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { // case 1 -> 这里的1就是startActivityForResult(mIntent,1)里面的1。 case 1: if (resultCode == RESULT_OK) { // getData 就是从SecodeActivity传回给firstActivity的数据。 // 即getData的内容为:This data is from SecodeActivity String getData = data.getStringExtra("data"); } break; }}
SecodeActivity代码片段:@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.secode_layout); Intent intent = getIntent(); // getData 就是从firstActivity获取到的数据。 // 即getData的内容为:This data is from firstActivity String getData = intent.getStringExtra("data");}// 当按返回键时,让SecodeActivity销毁。只有当SecodeActivity销毁才会回调firstActivity中的onActivityResult()方法@Overridepublic void onBackPressed() { Intent intent = new Intent(); // 将要返回给firstActivity的数据 intent.putExtra("data","This data is from SecodeActivity"); setResult(RESULT_OK, intent); finish();}
finish()和System.exit(0)
finish():仅仅把当前Activity退出了,但是并没有释放资源。
System.exit(0):是退出整个应用程序的,是针对整个Application的。将整个进程直接kill,活动所占的资源会被释放。等同于使用android.os.Process.killProcess(android.os.Process.myPid());
- 第一行代码 第二章 Activity
- Android Studio 手动创建活动(Activity) 第一行代码 第二章
- 读书笔记 第一行代码 第二章Activity相关
- 第一行代码 第二章 Activity的生命周期
- 第一行代码 第二章 Activity的启动模式
- 《第一行代码》 随手笔记——第二章 Activity 活动
- 第一行代码系列第二章——手动创建activity
- 第一行代码系列第二章——在activity中使用Toast
- 第一行代码_第二章
- 第一行代码学习笔记 第二章
- 《第一行代码》第一章、第二章笔记
- 第一行代码Android第二章读书笔记
- 第一行代码Android-------Activity
- 第一行代码,Activity部分
- 第一行代码笔记 Activity
- [Android][第一行代码][第 2 章 Activity]
- <android>第一行代码 第二章源码整理
- 《第一行代码》第二章/Toast,Menu,Intent
- 数据结构(三)队列(一)链表实现
- 【剑指offer】面试题 5:替换空格
- Android TextView设置图片技巧
- time sys
- android Could not download manifest-merger.jar
- 第一行代码 第二章 Activity
- JavaScript笔记
- tomcat启动web项目报错
- Android 图片自动切换
- IDEA导入Spring源码(Gradle导入)
- Comand
- 32位汇编指令笔记
- 简单的桶排序法
- Spring之AOP