編輯:關於android開發
Itent是Android程序中各個組件直接交換的一個重要方式可以指定當前組件要執行任務同時也可以給各個組件直接進行數據交互
同時Intent啟動往往可以啟動活動,啟動服務,以及發送廣播等場景
分類
1.顯示Intent和隱示Intent
在分別講解顯示意圖和隱示意圖時我們要在rec目錄 -layout資源新建活動 。
然後右鍵點擊新建一個activity_second.xml布局文件
然後在該文件下添加一個按鈕組件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/button2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Button2" /> </LinearLayout>
在我們添加完按鈕組件之後同時給按鈕取個名字叫button2和唯一id名,然後在src 目錄工程包下新建一個活動SecondActivity繼承Activity類讓其成為活動類
然後重寫onCreate()方法,同時給該活動設置上下文布局文件
package com.example.intentdome; import android.app.Activity; import android.os.Bundle; public class SecondActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second);//讀取我們剛才在layout資源文件新建的布局文件 } }
3.然後在AndroidManifest.xml工程配置文件中注冊一個活動
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.intentdome" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="17" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SecondActivity" > </activity> </application> </manifest>
以上步驟已經操作完畢,那我們開始下一步操作
1.給定MainActivit視圖文件綁定一個點擊事件
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //獲取按鈕對象 Button btn1 = (Button)findViewById(R.id.button1); //給該按鈕綁定一個監聽事件 btn1.setOnClickListener(new OnClickListener() { @Override //當鼠標點擊操作事著觸發該操作 public void onClick(View v) { } }); }
2.創建意圖對象
Intent的構 該類有多個構造函數其中一個Intent(Context packageCntext,Class<?> cls) 第一個參數:指定要啟動的上下文 第二個參數:指定要啟動的目標活動
//獲取一個意圖對象
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
3.實現活動啟動之間的交互
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //獲取按鈕對象 Button btn1 = (Button)findViewById(R.id.button1); //給該按鈕綁定一個監聽事件 btn1.setOnClickListener(new OnClickListener() { @Override //當鼠標點擊操作事著觸發該操作 public void onClick(View v) { //獲取一個意圖對象 //實現活動與活動直接的交互 Intent intent = new Intent(MainActivity.this,SecondActivity.class); //調用啟動活動操作 startActivity(intent); } }); }
特點:隱示它並不明確表面指出我們要啟動那個活動,而是抽象的指定一系列action和category等信息
1.實現隱示操作:打開AndroidManifest.xml文件重新編寫activity的內容
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SecondActivity"> <intent-filter > <action android:name="com.example.intentdome.ACTION_START"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> </application>
2.重新編寫MainActivity.java的按鈕點擊事件
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //獲取按鈕對象 Button btn1 = (Button)findViewById(R.id.button1); //給該按鈕綁定一個監聽事件 btn1.setOnClickListener(new OnClickListener() { @Override //當鼠標點擊操作事著觸發該操作 public void onClick(View v) { /* //獲取一個意圖對象 //實現活動與活動直接的交互 Intent intent = new Intent(MainActivity.this,SecondActivity.class); //調用啟動活動操作 startActivity(intent);*/ Intent intent = new Intent("com.example.intentdome.ACTION_START"); startActivity(intent); } }); }
3.運行:輸出同樣的結果
其實隱示不僅僅可以啟動自己程序的活動,還可以啟動其他程序的活動,使得Android多個應用共享成為了可以,這樣程序與程序直接進行數據交換,這樣就不用我們而外編寫其他程序活動來操作了
以下一個案例展示通過自己本程序去調用系統的浏覽器來打開一個博客的網頁操作
1.重新編寫MainActivity.java按鈕點擊事件
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //獲取按鈕對象 Button btn1 = (Button)findViewById(R.id.button1); //給該按鈕綁定一個監聽事件 btn1.setOnClickListener(new OnClickListener() { @Override //當鼠標點擊操作事著觸發該操作 public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.cnblogs.com/xiaotaojing/")); startActivity(intent); } }); }
以上是Intent中通過Intent來啟動一個活動操作,其實Intent會可以活動與活動直接進行數據交互和傳遞,那然我們來看看是怎麼樣的一個過程吧
Intetn提供了一個putExtra()方法用於以鍵-值對的形式進行數據的存放,相當與Serlet的作用域對象setAttibute()方法,puExtra()方法提供了方法重載,將傳遞的數據暫存在Intent中
啟動一個活動到另一個活動時,只需要在重Intent中獲取數據即可
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //獲取按鈕對象 Button btn1 = (Button)findViewById(R.id.button1); //給該按鈕綁定一個監聽事件 btn1.setOnClickListener(new OnClickListener() { @Override //當鼠標點擊操作事著觸發該操作 public void onClick(View v) { Intent intent = new Intent(MainActivity.this,SecondActivity.class); intent.putExtra("data", "Hello SecondActivity"); startActivity(intent); } }); }
可以通過getStringExtra()方法獲取存放的數據
Intent.getStringExtra(設值的參數名)
然後在ScondActivity.java中編寫如下代碼
package com.example.intentdome; import android.app.Activity; import android.os.Bundle; import android.widget.Toast; public class SecondActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); //通過提示框來顯示數據 Toast.makeText(this, getIntent().getStringExtra("data"), Toast.LENGTH_SHORT).show(); } }
運行測試
既然講到了一個活動可以給下一個活動傳遞數據,那可以返回數據為上一個活動呢? 其實是可以的,當你點返回鍵時不是可以返回上一個活動了嗎?哈哈,那只是返回並沒有攜帶數據一起返回
怎樣做才可以重一個活動返回上一個活動呢?還可以攜帶數據,其實我們需要用到一個方法就是startActivityForResulte() 其中該方法有兩個參數
第一個參數 :Intent對象、第二個參數:請求的結果碼.
btn1.setOnClickListener(new OnClickListener() { @Override //當鼠標點擊操作事著觸發該操作 public void onClick(View v) { Intent intent = new Intent(MainActivity.this,SecondActivity.class); startActivityForResult(intent, 1); } });
第二在SecondActivity.java中編寫如下代碼
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); Button btn2 = (Button)findViewById(R.id.button2); btn2.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Intent intent = new Intent(); //設置要返回的值 intent.putExtra("data_return", "我已經返回上一個活動了"); //設置返回結果 setResult(RESULT_OK, intent); finish();//銷毀前執行 } });
由於我們設置了starActivityForReturn()方法來啟動SecondActivity,在SecondActivity被銷毀之後會調用一個活動的onActivityResult()方法,所以我要在MainActivity.java中重寫
onActivityResult()方法
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case 1: if(resultCode==RESULT_OK){ Toast.makeText(this, data.getStringExtra("data_return"),Toast.LENGTH_SHORT).show() ; } break; default: break; } }
3.測試
成功執行
是不是這次講解的知識點很強大呢?哈哈,這已經實現了像網站中頁面與頁面之間跳轉同時攜帶數據的效果
分析google的multidex庫,googlemultidex庫 我們在開發項目時,喜歡引入好多的第三方包,大大的方便了我們的開發,但同時,因為android方法總
Android中Dialog對話框,androiddialog布局文件xml: 1 <LinearLayout xmlns:android=http://sc
Android重構與設計之路,從整理提示對話框彈窗開始,android彈窗 封裝一個獨立彈窗Module,這裡的彈窗包括普通的Dialog方式彈框和WindowMana
Android實戰--電話撥號器,android電話撥號器今天跟著黑馬視頻建立一個android app--電話撥號器 首先新建一個android項目 activity