第一行代碼第二章學習筆記

第一行代碼

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

2.6活動的一些小技巧

發佈了136 篇原創文章 · 獲贊 9 · 訪問量 8071
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章