Android -- 两个activity界面的切换, 显示Intent 和 隐式Intent,putExtra传递数据
1. 两个Activity之间可以通过Intent切换, 包括显示Intent 和 隐式Intent。
实例代码
MainActivity.java
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } /* 同一个应用程序里面 自己激活自己的东西. 推荐使用显示意图. 效率高. 不同的应用程序里面,激活别人的应用,或者是让自己的某一个界面希望被别人激活,推荐使用隐式意图, 1. 查询系统里面的所有的activity 看看是不是有满足条件的activity. 2.有,判断多少个,只有1个 直接启动, 如果有多个,列表方式 3.如果没有, 应用程序异常终止 activity not found execption */ // Intent 显示意图. // 显示意图: 必须要指定开启组件的具体信息( 包名, 组件名, 组件的class) //当用户点击按钮的时候 跳转到第二个界面 public void click(View view){ Intent intent = new Intent(this, OtherScreenActivity.class); // intent.setClassName(this, "com.itheima.twoactivity.OtherScreenActivity"); startActivity(intent); } public void click2(View view){ //cmp=com.android.gallery/com.android.camera.GalleryPicker Intent intent = new Intent(); intent.setClassName("com.android.gallery", "com.android.camera.GalleryPicker"); startActivity(intent); } //采用隐式意图 激活第三个界面 public void click3(View view){ Intent intent = new Intent(); intent.setAction("com.itheima.xxx"); //如果权限xml文件中没有加,则是默认值,必须设置为CATEGORY_DEFAULT intent.addCategory(Intent.CATEGORY_DEFAULT); //指定数据的类型, 如果一个APP既有Data又有Type 必须同时设置 //intent.setType("vnd.android.cursor.item/haha"); //intent.setData(Uri.parse("itheima:gagaga")); intent.setDataAndType(Uri.parse("itheima:gagaga"), "vnd.android.cursor.item/haha"); intent.putExtra("name", "kevin"); //putExtra 可以传对象,但是需要实现Serializable接口 startActivity(intent); //动作action 类型Type 数据data //动作 数据 //打 人 打酱油 //泡 茶 泡 妞 //泡绿茶 泡红茶 泡乌龙茶 //addCategory 附加的信息. 提供一些执行的环境 参数 } public void click4(View view){ Intent intent = new Intent(); intent.setAction("android.intent.action.SENDTO"); intent.addCategory("android.intent.category.DEFAULT"); intent.setData(Uri.parse("sms:110")); startActivity(intent); } }
OtherScreenActivity.java
//activity 是系统的重要的组件 , //操作系统要想找打activity 就必须在 清单文件里面配置 public class OtherScreenActivity extends Activity { //重写 activity 的oncreate方法 方法里面设置初始化程序的界面. @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_two); Intent intent = getIntent();//获取到激活他的意图 Uri uri = intent.getData(); String result = uri.toString(); String name = intent.getStringExtra("name"); System.out.println(result); } }
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itheima.twoactivity" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/app" android:label="@string/application_name" android:theme="@style/AppTheme" > <activity android:name="com.itheima.twoactivity.MainActivity" android:icon="@drawable/atools" android:label="@string/activiy01" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.itheima.twoactivity.OtherScreenActivity" android:icon="@drawable/ic_scanner_malware" android:label="@string/activity02" > <intent-filter> <action android:name="com.itheima.xxx" /> <data android:mimeType="vnd.android.cursor.item/haha" android:scheme="itheima" > </data> <category android:name="android.intent.category.DEFAULT" > </category> </intent-filter> </activity> </application> </manifest>