Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

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

$
0
0

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

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

1、使用显式Intent
2、使用隐式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.com
android: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();
    }
作者:TyroneRenekton 发表于2017/2/7 11:29:38 原文链接
阅读:41 评论:2 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>