1.两种意图:
(1)显式意图:
在代码里面用intent设置要开启Activity的字节码.class文件;
(2)隐式意图:
Android(java)学习笔记218:开发一个多界面的应用程序之人品计算器的简单实现,在代码里面设置intent的action和data,框架通过解析清单文件去找到Activity,然后才去开启;
(3)比较 显式意图 和 隐式意图 优缺点?
显式意图:
优点:代码编写很简单,无需额外的配置,只需要指定要激活的组件字节码.class就可以了,不需要在清单文件中配置意图过滤器<intent-filter>
缺点:代码的耦合性比较强。(高内敛、低耦合是我们追求的)
应用场景:自己应用程序开启自己的界面,推荐使用显示意图,效率高。
隐式意图:
应用场景:开启别人的应用程序的界面 或者 自己的界面,想让别的应用程序开启。
2.在Android(java)学习笔记218:开发一个多界面的应用程序之人品计算器的简单实现笔记中,使用是隐式意图;
这里我们修改成显示意图,如下:
(1)MainActivity.java,修改为如下:
1 package com.itheima.rpcalc; 2 3 import android.app.Activity; 4 import android.content.Intent; 5 import android.net.Uri; 6 import android.os.Bundle; 7 import android.view.View; 8 import android.view.View.OnClickListener; 9 import android.widget.Button; 10 import android.widget.EditText; 11 12 public class MainActivity extends Activity { 13 private Button bt_start; 14 private EditText et_name; 15 16 @Override 17 protected void onCreate(Bundle savedInstanceState) { 18 super.onCreate(savedInstanceState); 19 setContentView(R.layout.activity_main); 20 bt_start = (Button) findViewById(R.id.bt_start); 21 et_name = (EditText) findViewById(R.id.et_name); 22 bt_start.setOnClickListener(new OnClickListener() { 23 @Override 24 public void onClick(View v) { 25 // 跳转到第二个界面 26 Intent intent = new Intent(MainActivity.this,CalcActivity.class); 27 intent.setData(Uri.parse("calc://"+et_name.getText().toString()));//传递数据给另一个CalcActivity,但是不用在清单文件中注册 28 startActivity(intent); 29 } 30 }); 31 } 32 }
同时这里的AndroidMainfest.xml如下:
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.itheima.rpcalc" 4 android:versionCode="1" 5 android:versionName="1.0" > 6 7 <uses-sdk 8 android:minSdkVersion="8" 9 android:targetSdkVersion="17" /> 10 11 <application 12 android:allowBackup="true" 13 android:icon="@drawable/ic_launcher" 14 android:label="@string/app_name" 15 android:theme="@style/AppTheme" > 16 <activity 17 android:name="com.itheima.rpcalc.MainActivity" 18 android:label="@string/app_name" > 19 <intent-filter> 20 <action android:name="android.intent.action.MAIN" /> 21 <category android:name="android.intent.category.LAUNCHER" /> 22 </intent-filter> 23 </activity> 24 <!-- 声明一个新的界面 --> 25 <!-- 这里只需要声明一下Activity,不用注册data,action,schem等等数据--> 26 <activity android:name="com.itheima.rpcalc.CalcActivity"> 27 28 29 </activity> 30 </application> 31 32 </manifest>
其他代码不做修改。
(2)明显我们上面这些修改成显式意图,省略了在清单文件声明,更方便。