Android 学习(2)关于两个组件之间一种重要的交互fanfshi

本文详细介绍了Android开发中Intent的使用方法,包括显式Intent和隐式Intent的区别与应用场景,以及如何通过Intent在不同Activity间传递数据。

关于两个组件之间重要的交互方式的话,会用到  Intent  

1.Intent 大致会分为 显式和隐式

A. 显式(有个方法意图很明显)

  显示的可以允许有多个构造函数的重载使用,比如下面这个是显示的重构函数:
    @Override
public void onClick(View v){ 
    Intent intent = new Intent(FristActivity.this,SecondActivity.class);
    startActivity(intent);
}
            Intent intent = new Intent(FristActivity.this,SecondActivity.class);

的第一个参数的意思是,启动活动的上下文,简单点说,就是在这样的环境下,比如这个就是第一个动作的环境下FristActivity.this,,会有响应。第二个参数就是响应的目的,即为响应的方向,会在secondActivity的环境下产生响应吧。

        在Activity的条件下,会有一个startActivity的方法用来专门启动活动,现在就是在启动,Intent这个活动。

B.隐式

可以直接使用intent的另外一个构造函数,把要跳转的name的参数穿进去,比如下面的

<activity android:name=".SecondActivity">
<intent-filter> // 主活动需要配置的东西还要多一步
    <action android:name="com.example.activitytest.ACTION_START" />

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

第二个动作的名称name= action_start。

在传参的时候可以直接使用

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

这种方式,隐式传参的方式,传参数的地址name,想要响应second的这个动作的时候,intent的另一个构造函数,没有category的参数构造,default就是一种默认的参数构造。addCategory()的方法可以设置多个参数的响应。

C.多种隐式情况的设置

隐式除了上面传输参数的过程,还有可以启动其他程序的活动,是的安卓之前程序的功能共享成为了可能,

可以通过修改FristActivity的中间事件响应的.

直接给intent中传递一个参数,比如直接转换网址的参数

public void onClick(View v){
        Intent intent = new Intent(Intent.ACTION_VIEW);
        //intent.addCategory("com.example.activitytest.MY_CATEGORY");
        intent.setData(Uri.parse("http://www.baidu.com"));
        startActivity(intent);
    }

其中的   Intent intent = new Intent(Intent.ACTION_VIEW); 主要是根据用户传参的数据类型,来打开不同的应用,就是自己的隐式调用,其实可以直接进到封装好的方法里面看一下,是下面的样子,也就是调用一个系统的方法。

public static final String ACTION_VIEW = "android.intent.action.VIEW";

至于setData()的这个方法,也可以直接进去看,如下:

public @NonNull Intent setData(@Nullable Uri data) {
    mData = data;
    mType = null;
    return this;
}

给他传一个Uri的对象data,这个data是intent当前操作的数据,以字符串的形式传入。尔Uri.parse就是转换成字符串的一个方法。具体可以见这个https://www.cnblogs.com/yfafa/p/8624788.html。


在这个时候用的intent方法实际上是通过接受(intent.ACTION_VIEW)的这个方法

D.隐式之间的参数传递

先把要传输的参数暂时存储起来,存在intent中,然后在需要的时候从intent中在继续取出来。

比如,在fristActivitity当中有个字符串,现在把字符串传到SecondActivity的动作当中,

public void onClick(View v){
        String data = "Hello SecondActivity";
        Intent intent = new Intent(FristActivity.this,SecondActivity.class); // 会调用所有可以打开的app
        //intent.addCategory("com.example.activitytest.MY_CATEGORY");
        intent.putExtra("extra_data",data); 
        startActivity(intent);
    }

putExtra(key,value)按照这样的方式来传参数,其中第二个才是真正要传输的值。取值的时候,也要用intent的方法来取值

然后,在SecondActivity()中把值好好的取出来;可以看代码里的注释的部分

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second_layout);
    /*首先用getIntent()的这个方法启动intent    然后用get键值的方法来得到之前存进去的值
    还有getBooleanExtra 的这种方法等
    之前如果传进去的是布尔类型就用这种方法
    * */
    Intent intent = getIntent();
    String data = intent.getStringExtra("extra_data");
    Log.d("SecondActivity",data);
}


ps:突然不小心出现了 Default Activity not found的这个错误 ,但是当设置了默认的模拟器的时候,还是要先选择默认的模拟器

于是在,app的地方选择了Edit config 的选项,然后设置https://blog.csdn.net/Liuhe_5656/article/details/79843222

见这个博文,顺利解决。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值