【2.3 使用Intent在活動之間穿梭】intent與startActivityForResult

引言:
對《第一行代碼》第二版第二章內容進行總結,這裏總結2.1-2.3,重點放在2.3
1.顯示intent:
利用顯示intent啓動一個活動:

Intent intent=new Intent(mContext, SwustMovieCommentsActivity.class);
mContext.startActivity(intent);

攜帶數據給下一個活動:

intent.putExtra("mData",  mData);  //傳遞一個對象
intent.putExtra("keyBoard",false);  //傳遞一個布爾值

獲取攜帶的數據:

movieData=(MovieListBean)getIntent().getSerializableExtra("mData"); //獲取對象
keyBoard=getIntent().getBooleanExtra("keyBoard",false); //獲取基本數據類型,後面一個參數爲默認值。

2.隱式intent:
AndroidManifest.xml文件中爲活動添加intent-filter標籤,即過濾器:

        <activity android:name=".Main2Activity">
            <intent-filter>
                <action android:name="android.intent.action.mine2" />
                <!--                當且僅當含有DEFAULT的category的活動才能隱式啓動-->
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.mine2" />
            </intent-filter>
        </activity>

java代碼中

		Intent intent=new Intent();
        intent.setAction("android.intent.action.mine2");
        intent.addCategory("android.intent.category.mine2");
        mContext.startActivity(intent);

3.startActivityForResult:
作用:
此方法可以用於啓動一個活動,並且從被啓動的活動中返回數據到啓動方活動
用法:
首先,在啓動方調用startActivityForResult這個方法:

Intent intent=new Intent(mContext, SwustMovieCommentsActivity.class);
mContext.startActivityForResult(intent,1);

就是常規的創建一個Intent,只不過,啓動的時候調用startActivityForResult,多傳入了一個參數,requestCode,這個參數與回調方法onActivityResult的requestCode參數是對應的。
注意我這裏的mContext其實就是一個Activity的引用。

然後,在接收方:

    @Override
    public void onBackPressed() {
        Intent intent=new Intent();
        if(flag){
            intent.putExtra("data_return",1);
        }else{
            intent.putExtra("data_return",0);
        }
        setResult(RESULT_OK,intent);
        super.onBackPressed();
    }

創建一個Intent,並且附帶上我們要返回的值,調用setResult方法傳入intent,實現回調。
溫馨提示:如果你也是在onBackPressed中實現回調,務必在調用父類onBackPressed之前實現回調,否則會回調失敗。

最後,在啓動方獲取數據:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.w("MovieList","ActivityResult:"+requestCode+" "+resultCode);
        if(requestCode==1&&resultCode==RESULT_OK){
            if (data != null) {
                int value=data.getIntExtra("data_return",0);
                if(value==1){
                    onRefresh();
                }
            }
        }
    }

4.拓展:
書畢竟會過時,況且《第一行代碼》第二版本身就是基於Android7.0版本寫的,對於7.0以上安卓不太適用,想學到最新最全面的知識,還是得看:官方文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章