【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以上安卓不太适用,想学到最新最全面的知识,还是得看:官方文档

猜你喜欢

转载自blog.csdn.net/tran_sient/article/details/105420540
2.3