第一章 活动Activity
设置为主Activity
在AndroidManifest.xml中对应的Activity加入意图过滤器
<activity android:name=".MainActivity">
<!--设置为主Activity-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
按钮点击事件
设置好按钮
<!--id为唯一标志符,text为显示的字符-->
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button_1"
android:text="Button1"/>
在Activity里面设置好响应事件
//先生成一个Button,通过findid找到布局中对应的按钮
Button button1 = findViewById(R.id.button_1);
//然后设置点击监视器
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//具体响应的事件
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
意图
显式意图
Intent(Context packageContext, Class<?> cls)。这个构造函数接收两个参数,第一个参数 Context 要求提供一个启动活动的上下文,第二个参数 Class 则是指定想要启动的目标活动,通过这个构造函数就可以构建出 Intent 的“意图”。然后用startActivity(),把传送过去
//先构建出了一个 Intent,传入 FirstActivity.this 作为上下文,传入 SecondActivity.class作为目标活动,这样我们的“意图”就非常明显了,即在 FirstActivity 这个活动的基础上打开 SecondActivity 这个活动。然后通过startActivity()方法来执行这个 Intent。
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
隐式意图
它并不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的 action 和 category 等信息,然后交由系统去分析这个 Intent,并帮我们找出合适的活动去启动。
修改AndroidManifest.xml
在标签下配置的内容,可以指定当前活动能够响应的 action
和 category
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
在标签中我们指明了当前活动可以响应 com.example.activitytest.ACTION_START 这个 action,而标签则包含了一些附加信息,更精确地指明了当前的活动能够响应的 Intent 中还可能带有的 category。
然后修改要执行这个意图的Activity
Intent intent = new Intent("com.example.activitytest.ACTION_START");
startActivity(intent);
直接将 action 的字符串传了进去,表明我们想要启动能够响应 com.example.activitytest.ACTION_START 这个 action 的活动
内置隐式意图
打开网页
Intent.ACTION_VIEW,这是一个 Android 系统内置的动作, Uri.parse()方法,将一个网址字符串解析成一个 Uri 对象,再调用 Intent 的 setData()方法将这个 Uri 对象传递进去
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
URI.parse(),比如要有完整的协议,比如http://这样他才能识别出这是一个网址,需要用浏览器来打开
拨打电话
Intent.ACTION_DIAL
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
活动传递数据
向下一个活动传递数据
//第一个activity存储到intent里面
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("键",值)
//第二个activity先获得上一个的intent,然后获取intent数据
Intent intent = getIntent();
String data = intent.getStringExtra("键")
//如果要获取int类型的数值,用getIntExtra()
向上一个活动传递数据
- MainActivity.class
startActivityForResult()方法也是用于启动活动的,但这个方法期望在活动销毁的时候能够返回一个结果给上一个活
动,用在上一个活动
//startActivityForResult()方法接收两个参数,第一个参数还是 Intent,第二个参数是请求码,用于在之后的回调中判断数据的来源,一般为1
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivityForResult(intent, 1);
- SecondActivity.class
setResult()这个方法非常重要,是专门用于向上一个活动返回数据的,接收两个参 数 , 第 一 个 参 数 用 于 向 上 一 个 活 动 返 回 处 理 结 果 , 一 般 只 使 用 RESULT_OK 或RESULT_CANCELED 这两个值,第二个参数则是把带有数据的 Intent 传递回去,然后调用了 finish()方法来销毁当前活动。
Intent intent = new Intent();
intent.putExtra("test", "这是从SecondActivity返回的信息");
setResult(RESULT_OK, intent);
finish();
- MainActivity.class
使用 startActivityForResult()方法来启动 SecondActivity 的,在 SecondActivity被销毁之后会回**调上一个活动的 onActivityResult()**方法,因此我们需要在 FirstActivity 中重写这个方法来得到返回的数据
onActivityResult()方法带有三个参数,第一个参数 requestCode,即我们在启动活动时传入的请求码(这里是1)。第二个参数 resultCode,即我们在返回数据时传入的处理结果(这里是RESULT_OK)。第三个参数 data,即携带着返回数据的 Intent。
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//这里是请求码
switch (requestCode) {
case 1:
//这里是响应码
if (resultCode == RESULT_OK) {
String returnData = data.getStringExtra("test");
Log.d("returnmes", returnData);
}
else
Log.d("returnmes", "没有收到resultCode");
break;
default:
Log.d("returnmes", "没有收到requestCode");
}
}
生命周期
- onCreat(),Activity第一次被创建时候调用,初始化操作,比如加载布局、绑定事件
- onStart(),Activity由不可见到可见
- onResume(),Activity成为返回栈栈顶,准备好和用户进行交互,(中断后)重新开始
- onPause(),系统去启动或者恢复另一个Activity时候调用,只保留这个Activity关键数据,将一部分资源释放
- onStop(), Activity完全不可见时候
- onRestart(),由Stop转化为Start状态时调用,就是这个Activity被重新启动了
- onDestroy(),这个Activity被销毁,释放内存
常用重写方法
//按下返回键,后面必须带finish()才能实现关闭功能,按一下是不会自动实现的
onBackPressed()