安卓入门2
使用Intent在活动间穿梭(Intent不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据)
1、使用显式Intent
基于安卓入门1的内容,继续在ActivityTest项目中再创建一个活动。右击com.example.administrator.activitytest包->New->Activity->Empty Activity,会弹出一个创建活动的对话框,将活动命名为SecondActivity,并勾选Generate Layout File,给布局文件起名为second_layout,不勾选Launcher Activity选项,然后点击Finish。
Android Studio会自动生成SecondActivity.java和second_layout.xml这两个文件。在second_layout中添加一个按钮Button 2(步骤同前),SecondActivity中的代码自动生成一部分,保持默认不变。
AndroidManifest.xml已经注册过活动,打开如下:
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.administrator.activitytest"> 4 5 <application 6 android:allowBackup="true" 7 android:icon="@mipmap/ic_launcher" 8 android:label="@string/app_name" 9 android:supportsRtl="true" 10 android:theme="@style/AppTheme"> 11 <activity android:name=".MainActivity"> 12 <intent-filter> 13 <action android:name="android.intent.action.MAIN" /> 14 15 <category android:name="android.intent.category.LAUNCHER" /> 16 </intent-filter> 17 </activity> 18 <activity android:name=".SecondActivity"></activity> //SecondActivity不是主活动,不需要配置<intent-filter>标签里的内容 19 </application> 20 21 </manifest>
修改安卓入门1中的MainActivity中的按钮点击事件,在MainActivity这个活动的基础上打开SecondActivity这个活动,代码如下:
1 button1.setOnClickListener(new View.OnClickListener(){ 2 @Override 3 public void onClick(View v){ 4 Intent intent=new Intent(MainActivity.this,SecondActivity.class); //第一个参数Context要求提供一个启动活动的上下文,第二个参数Class指定想要启动的目标活动 5 startActivity(intent); //startActivity()用于启动活动 6 } 7 });
重新运行程序,在MainActivity界面点击按钮成功启动SecondActivity这个活动。
2、使用隐式Intent(并不指明我们想要启动哪一个活动,而是指定了一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent并找出合适的活动去启动)
AndroidManifest.xml下,在<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够响应的action和category。只有<action>和<category>中的内容同时能够匹配上Intent中指定的action和category时,这个活动才能响应该Intent。
1 <activity android:name=".SecondActivity"> 2 <intent-filter> 3 <action android:name="com.example.administrator.activitytest.ACTION_START"/> 4 5 <category android:name="android.intent.category.DEFAULT"/> 6 </intent-filter> 7 </activity>
修改MainActivity中按钮的点击事件,代码如下:
1 button1.setOnClickListener(new View.OnClickListener(){ 2 @Override 3 public void onClick(View v){ 4 Intent intent=new Intent("com.example.administrator.activitytest.ACTION_START"); 5 startActivity(intent); 6 } 7 });
重新运行程序,在MainActivity界面点击按钮成功启动SecondActivity这个活动(打开自己程序内的活动)。
2.1使用隐式Intent,也可以启动其他程序的活动,比方调用系统的浏览器来打开网页。
修改MainActivity中按钮点击事件的代码,如下:
1 button1.setOnClickListener(new View.OnClickListener(){ 2 @Override 3 public void onClick(View v){ 4 Intent intent=new Intent(Intent.ACTION_VIEW); 5 intent.setData(Uri.parse("http://www.baidu.com")); //将网址字符串解析为Uri对象,再调用setData()方法将这个Uri对象传递进去 6 startActivity(intent); 7 } 8 });
重新运行程序,在MainActivity界面点击按钮成功启动系统浏览器。