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

xiaoxiao2021-02-28  57

关于两个组件之间重要的交互方式的话,会用到  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

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

转载请注明原文地址: https://www.6miu.com/read-2623764.html

最新回复(0)