安卓之路2

安卓学习的第二篇内容

Intent

Intent是在活动之间跳转不可少的方法

显式Intent

Intent是Android中组件之间进行交互的重要方式,不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。

Intent可大致分为两种显式Intent和隐式Intent,先来学习显式Intent的使用。

Intent有多个构造函数的重载,其中一个是Intent(Context packageContext, Class<?> cls),构造函数接受两个参数,Context参数要求提供一个启动活动的上下文,第二个参数Class则是指定想要启动的目标活动。

在使用Intent是,Activity类提供了一个startActivity()方法,这个方法是专门用于启动活动的,该方法接收Intent,将构建好的Intent传入方法即可启动目标活动。

隐式Intent

隐式Intent不指明我们想启动哪一个活动,而指定一些列action和category等信息,然后交由系统区分写这个Intent,找出合适的活动去启动。(合适的活动是什么?A:可以响应Intent的活动)

通过配置<activity>标签下的<intent-filter>,可以指定当前活动可以响应的action和category:

<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="com.compass.demo.ACTION_START"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>

这种配置使SecondActivity活动可以响应action为com.compass.demo.ACTION_START且category为android.intent.category.DEFAULT的活动。

通过隐式Intent还可以实现调用其他程序的活动的目的,利用这种功能可以实现浏览网页等功能。

向下一个活动传递数据

Intent提供了一系列putExtra()方法的重载,可以把我们向传递的数据暂存在Intent中,启动了另一个活动之后,只需要把这些数据再从Intent中取出来就可以了!下面是一个传递字符串的例子:

//传递部分,位于发起活动
button1.setOnClick(new View.OnclickListener(){
@Override
public void onClick(View v){
String data = "Compass forever!";
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("extra_data", data);
startActivity(intent);
}
});
//接收部分,位于目的活动
public class SecondActivity extends AppCompatActivity{
@Override
protected void onCreat(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.second_layout);
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
Log.d("SecondActivity",data);
}
}

getStringExtra()用于接收字符串

getIntExtra()用于接收整型数据

getBooleanExtra()接收布尔型数据

返回数据给上一个活动

startActivityForResult()方法可以满足我们在下个活动销毁时返回结果给上一个活动的需求。这个方法接收两个参数,第一个参数是intent,第二个参数是请求码(用于在回调中判断数据的来源)。

使用这种方法启动活动,需要在被启动的活动内构建一个Intent,在这里这个Intent仅仅用于传递数据而已。我们通过putExtra()将要传递的数据存放在Intent中,然后调用setResult()方法,setResult方法接收两个参数,第一个参数用于向上一个活动返回处理结果,一般只使用RESULT_OK或RESULT_CANCELED这两个值,第二个参数则把带有数据的Intent传递回去。

在原活动中重写onActivityResult()方法来获取返回的数据,如下图所示:

onActivityResult()方法带有三个参数,第一个参数requestCode是启动时传入的请求码,第二个参数resultCode是我们返回数据时传入的处理结果,第三个参数则是携带着返回数据的Intent。

结语

这次主要学习了Intent相关的知识,考虑到明天(2020.2.17)就要开启网课的第一天了,所以这次的内容可能会稍微少一点点。

按照学习进度,接下来应该是要学习活动的生命周期相关的知识了,这是很重要的一部分,所以我可能会用很大的篇幅来记录学习过程。加油!

评论