Intent的跳轉方式


第一種跳轉方式 ,簡單跳轉
發送:
        Intent intent = new Intent(ActivityA.this, ActivityB.class);
        startActivity(intent);
第二種跳轉方式,帶數據跳轉:
1.攜帶一些附加信息鍵值對
2.通過使用putextra()方法添加數據,使用getXXXExtra()方法獲取數據
3.複雜數據實現Parcelable接口或者Serializable接口來傳遞

        Intent intent = new Intent(ActivityA.this, ActivityB.class);
        intent.putExtra("Message", "This message from Activity A!");//鍵值對方式
        startActivity(intent);
     接收方:
        Intent intent = getIntent();
        String msg = intent.getStringExtra("Message");
        待返回值跳轉:
        發送方:
        Intent intent = new Intent();
        intent.setClass(ActivityA.this, ActivityB.class);
        startActivityForResult(intent, REQUEST_CODE);
        重寫onActivityResult方法

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.i(TAG, "onActivityResult");
        if(requestCode == REQUEST_CODE) {
            switch (resultCode) {
                case RESULT_OK: {
                }
                    break;
            }
        }
    }   
        接收方:
        Intent intent = new Intent();
        intent.putExtra("Message", "This message return from Activity B!");
        setResult(RESULT_OK, intent);
        finish();   
Intent的標誌位 Flag
Intent指定Activity的啓動方式:設置intent的Flags來指定Activity的啓動方式,這裏有兩種介紹一下
1.FLAG_ACTIVITY_NEW_TASK
如果intent設置的flag對應跳轉的activity的任務棧沒有指定新的任務棧,則新啓動的Activity進入棧頂,如果
對應跳轉的activity的指定了別的任務棧,則該activity啓動後處在新的任務棧;
        <!--<activity android:name=".ActivityC" />-->//不會新建任務棧


        <activity
            android:name=".ActivityC"
            android:taskAffinity="com.netease.study.intent.ActivityB"/>//會新建任務棧
新建任務棧下的adb命令行下的棧如下:
   Running activities (most recent first):
    TaskRecord{533b88c4 #22 A com.netease.study.intent.ActivityB U 0}
      Run #6: ActivityRecord{533a9b20 u0 com.netease.study.intent/.ActivityC}
    TaskRecord{5335a8a8 #21 A com.netease.study.intent U 0}
      Run #5: ActivityRecord{53310730 u0 com.netease.study.intent/.ActivityB}
      Run #4: ActivityRecord{5330d9d4 u0 com.netease.study.intent/.ActivityA}
2.FLAG_ACTIVITY_SINGLE_TOP
這個和activity的啓動方式很像,如果當前activity處於棧頂則不新建activity,
如果該activity應啓動,不處於棧頂,則會新建一個該活動
如果ActivityC 第一次啓動則:
  Running activities (most recent first):
    TaskRecord{5332e528 #23 A com.netease.study.intent U 0}
      Run #6: ActivityRecord{5336f83c u0 com.netease.study.intent/.ActivityC}
      Run #5: ActivityRecord{534c06bc u0 com.netease.study.intent/.ActivityB}
      Run #4: ActivityRecord{532e5f60 u0 com.netease.study.intent/.ActivityA}
      如果此時ta已在棧頂:
  Running activities (most recent first):
    TaskRecord{5332e528 #23 A com.netease.study.intent U 0}
      Run #6: ActivityRecord{5336f83c u0 com.netease.study.intent/.ActivityC}
      Run #5: ActivityRecord{534c06bc u0 com.netease.study.intent/.ActivityB}
      Run #4: ActivityRecord{532e5f60 u0 com.netease.study.intent/.ActivityA}
此時 c調用的是 onNewIntent方法 !
    public void startActivityC(View v) {
        Intent intent = new Intent();
        intent.setClass(this, ActivityC.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        startActivity(intent);
    }


3.FLAG_ACTIVITY_CLEAR_TOP
這個和activity的singletask很相像,當activity已經處於棧中,但不處於棧頂,這個時候,如果該activity啓動
則會把處在該activity前的activity給clear掉



                          
 第三種,指定組件跳轉:
 例如:
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_DIAL);
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        startActivity(intent);
       
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_DIAL);
        intent.setData(Uri.parse("tel:1320010001"));
        startActivity(intent);
        不指定組件跳轉:隱式跳轉
        需要在清單文件中進行:
        
        <activity android:name=".ShareActivity">
            <intent-filter>

                <action android:name="android.intent.action.SEND"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:mimeType="text/plain"/>
                <!--<data android:mimeType="image/*"/>-->
                <!--<data android:mimeType="audio/*"/>-->
                <!--<data android:mimeType="video/*"/>-->

            </intent-filter>
        </activity>
        然後在Activity
    public void shareTextContent(View v) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_SEND);
        intent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
        intent.setType("text/plain");
        startActivity(intent);
    }        

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