首页 > 学院 > 开发设计 > 正文

第一行安卓代码——使用Intent在活动之间穿梭2.3

2019-11-09 18:09:55
字体:
来源:转载
供稿:网友

只有一个活动的安卓应用确实太简单了,这一节我们一起来看看如何由主活动跳转到其他的活动,以及活动的返回,参数的传递。

在活动之间穿梭主要有两种方式

1、使用显式Intent2、使用隐式Intent

2.3.1显示Intent的实现

button1.setOnclickListenter(new View.OnclickListener() { @Override public void onClick(View v) { Intent intent = new Intent(FirstActivity.this, SecondActivity.class); } startActivity(intent);});

点击按钮1之后由FirstActivity跳转到SecondActivity,代码非常简单

2.3.2隐式Intent的实现

我们新建项目之后打开AndroidManifest.xml,发现主活动的代码是这样的

<activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>

新建一个SecondActivity,它在xml文件中的代码如下

<activity android:name=".SecondActivity"></activity>

与主活动相比缺了【intent-filter】标签 【intent-filter】的字面意思就是【Intent过滤器】 所以我们可以给SecondActivity添加“过滤器”,让别的活动可以找到它。

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

先给出一个代码实例

button1.setOnclickListenter(new View.OnclickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.example.activitytest.ACTION_START"); } startActivity(intent);});

只有【action】和【categery】中的内容同时匹配上Intent中指定的action和category时,这个活动才能相应Intent。但上面这个例子没有写【category】,这是因为【category android:name=”android.intent.category.DEFAULT”/】是一种默认的category。

xml修改如下

<activity android:name=".SecondActivity"> <intent-filter> <action android:name="com.example.activitytest.ACTION_START"/> <category android:name="com.example.activitytest.MY_CATEGORY"/> </intent-filter> </activity>

代码如下

button1.setOnclickListenter(new View.OnclickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.example.activitytest.ACTION_START"); } intent.addCategory("com.example.activitytest.MY_CATEGORY"); startActivity(intent);});

2.3.3隐式Intent的其它用法。

比如通过【action】打开网页

button1.setOnclickListenter(new View.OnclickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.baidu.com")); startActivity(intent);});

同时,我们还可以在【intent-filter】标签中再配置一个【data】标签,用于更精确的指定当前活动能够相应什么类型的数据。 【data】标签中主要有以下配置内容

android:scheme ; 用于指定数据的协议部分,如上例的http部分android:host ; 用于指定数据的主机名部分, 如上例的www.baidu.comandroid:port ; 用于指定数据的端口部分,一般紧跟在主机名之后,上例中是默认的80端口android:path; 用于指定主机名和端口之后的东西android:mimeType; 用户指定可以处理的数据类型,可以通过通配符来实现

具体的使用可以自己尝试一下。

2.3.4 向下一个活动传递数据

代码如下 在FirstActivity中

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);intent.putExtra("extra_data", "hello, sir");

在SecondActivity中

Intent intent = getIntent();String data = intent.getStringExtra("extra_data");

2.3.5 返回数据给上一个活动

在FirstActivity中代码

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);startActivityForResult(intent, 1);

startActivityForResult方法中的1是传过去的请求码,唯一即可。

在SecondActivity中代码

Intent intent = new Intent();intent.putExtra("data_return", "Hello, FirstActivity");setResult(RESULT_OK, intent);finish();

同时我们需要在FirstAcitivity中重写 onActivityResult方法接受返回的数据。

@Override PRotected void onActivityResult(int requestCode, int resultCode, Intent data) { switch(requestCode) { if(resultCode == RESULT_OK) { String returndata = data.getStringExtra("return_data"); } } }

什么时候返回呢?可以自定义按钮,点击按钮事件后返回。那安卓手机都会带有返回键,如果用户是通过返回键返回的怎么办呢? 重写onBackPressed方法就ok了。

@Override public void onBackPressed() { Intent intent = new Intent(); intent.putExtra("data_return", "Hello, FirstActivity"); setResult(RESULT_OK, intent); finish(); }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表