android基础--意图的学习

本文介绍Android应用中如何使用隐式意图实现不同Activity间的通信。通过MainActivity点击按钮触发意图,激活OtherActivity并展示视图。文章详细展示了Intent与Activity的绑定过程,并对比了显式意图与隐式意图的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Main.xml

<LinearLayout>

    <Button

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:id="@+id/button"

    android:text="@string/button"/>

</LinearLayout>

Other.xml

<LinearLayout>

<TextView 

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="@string/hello"

    />

</LinearLayout>

MainActivity.java

public class MainActivity extends Activity {

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

       

        Button button = (Button) this.findViewById(R.id.button);

        button.setOnClickListener(new ButtonClickListener());

    }

    private final class ButtonClickListener implements View.OnClickListener{

              public void onClick(View v) {

                     Intent intent = new Intent();

                     //采用隐式意图激活OtherActivity,下面两个参数在Manifest中配置好了

                     intent.setAction("cn.com.me");//传入动作参数

                     //intent.addCategory("android.intent.category.DEFAULT");//传入类别参数

                     startActivity(intent);//方法内回味intent设置类别android.intent.category.DEFAULT上面的传入类别参数的代码不用要

              }

    }

}

otherActivity.java

public class OtherActivity extends Activity{

    protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.other);

    }

}

Manifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

      package="cn.com.intent"

      android:versionCode="1"

      android:versionName="1.0">

    <application android:icon="@drawable/icon" android:label="@string/app_name">

        <activity android:name=".MainActivity"

                  android:label="@string/app_name">

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

       <!-- 完成对OtherActivity的配置 -->

       <activity android:name=".OtherActivity" android:label="@string/otheractivity">

           <!-- 配置意图过滤器android:name="cn.com.me"动作名称 -->

           <intent-filter>

              <!-- 动作参数 -->

              <action android:name="cn.com.me"/>

              <!-- 类别参数 -->

              <category android:name="android.intent.category.DEFAULT"/>

           </intent-filter>

       </activity>

    </application>

    <uses-sdk android:minSdkVersion="8" />

</manifest>

有数据参数时候的匹配情况举例:

<!-- 数据参数 -->

<data android:scheme="aaa" android:host="bbb" android:path="/ccc" android:mimeType="text/plain"/>

对应的设置数据参数方法

intent.setDataAndType(Uri.parse("aaa://bbb/ccc"), "text/plain");

不要采用这种方法:

intent.setData(Uri.parse("aaa://bbb/ccc"));

intent.setType("text/plain");

因为setType()会把setData()清空,从而产生意图不匹配的错误

采用隐式意图时:如果没有数据参数的情况下,只要意图对象中设置的动作和类别都出现在意图过滤器中,就能够跟过滤器匹配

注意:采用显示意图的话

<intent-filter>

       <!-- 动作参数 -->

       action android:name="cn.com.me"/>

       <!-- 类别参数 -->

       <category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

意图过滤器不用配置

用这个方法即可

intent.setClass(getApplicationContext(), OtherActivity.class);

在同一个应用中采用显示意图比较好,因为需要查找,所以用显示意图性能高一些

应用与应用之间的相互激活采用隐式意图比较好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值