使用Intent在活動間穿梭(Intent不僅可以指明當前組件想要執行的動作,還可以在不同組件之間傳遞數據) 1、使用顯式Intent 基於安卓入門1的內容,繼續在ActivityTest項目中再創建一個活動。右擊com.example.administrator.activitytest包->Ne ...
使用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界面點擊按鈕成功啟動系統瀏覽器。