第一行代碼
2.2intent的顯示
1.顯示
//啓動另一個窗口
//第一個參數是上下文,第二個參數是跳轉的界面
Intent intent=new Intent(this,Main2Activity.class);
startActivity(intent);
理解:
顯示的意圖需要上下文以及明確的跳轉對象
2.隱式:
<activity android:name=".Main2Activity" >
<intent-filter >
<action android:name="com.xample.a23intent_tranfer.ACTION_START"></action>
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</activity>
注意:沒有分組的情況下無法進行隱式意圖。
理解:活動可能存在多個,但是必須存在分組,默認intent都是會選擇
分組 android.intent.category.DEFAULT。
3.其他的隱式意圖操作
01:
//打開瀏覽器
Intent intent=new Intent(Intent.ACTION_VIEW);
//指定intent操作的數據
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
02自定義可以被當作瀏覽器打開的程序
xml
<activity android:name=".Main3Activity">
<intent-filter>
<action android:name="android.intent.action.VIEW"></action>
<!-- 設置可以接受的數據類型 -->
<data android:scheme="http"></data>
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</activity>
03響應手機
Intent intent=new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
2.3.4intent傳遞數據
1.普通傳遞方法
傳遞數據
//傳遞數據
//第一個數據是鍵值,第二個是傳遞的數據
intent.putExtra("key","hello");
接受數據
//獲得其他頁面給它的意圖
Intent intent=getIntent();
String msg=intent.getStringExtra("key");
缺點:
這種方法的數據傳遞對於鍵值的傳遞並不是很好,
我們可以對所有的activity封裝一個getNewIntent的方法,
接受要傳遞的值,鍵值封裝在裏面。
2.靜態工廠模式
Intent intent=new Intent(context,this.getClass());
intent.putExtra("key",val);
return intent;
2.3.5返回數據給上一個界面
啓動activity還有一種方法是startActivityForResult,這種方法
是當跳轉的第二個頁面銷燬的時候會回調 protected void onActivityResult函數
//第一個參數是發送的意圖,第二個參數是響應碼
//startActivityForREsult的啓動方法是當響應的哪一個界面被銷燬的時候返回信息
startActivityForResult(intent,1);
回調結果
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode)
{
case 1:
}
}
通過back鍵返回的數據傳遞方法
public void onBackPressed() {
super.onBackPressed();
Intent intent=new Intent();
intent.putExtra("key","hh");
setResult(RESULT_OK,intent);
}
2.4.4activity的生存週期
1.當某一個界面屬於onResume的狀態時,如果沒有完全被另一個
啓動的界面遮擋,那麼將會進入onPasue狀態,而不是onStop狀態。
2.4.5活動被回收了怎麼辦
當你從a活動到達b活動後,如果手機的內存不夠的話就會把你的a活動
回收。當你返回到a活動的時候,a活動將會重新被創建,但是a活動
的數據就會消失,但是我們可以使用下面的一個函數來保存數據。
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.get("hello");
}
這個函數是依靠Bundle來保存數據的,我們也可以利用bundle來
傳遞數據。
intent.putExtra("key",savedInstanceState);//將bundle保存在intent裏
intent.getBundleExtra("key");//獲得bundle
2.5活動的啓動模式
如何使用:
在AndroidManifest中設置android.lanuch_mode
1.standard
標準的啓動模式
2.singleTop
單一的啓動模式,只能存在一個在棧頂的activity
但是如果不在棧頂的化,將會創建一個全新的實例
3.singleTask
某一個activity只會在棧中存在一個實例
4.singleInstance