Android活动中的Intent初学

使用Intent跳转活动

显示Intent

通过Activity类中提供的startActivity方法直接启动活动
//使用Toast通知小消息,通过静态方法makeTest创建一个Toast对象,然后调用show方法显示Toast
//参数:上下文(活动本身就是一个Context对象),文本内容,显示时长
Toast.makeText(MainActivity.this, "MainActivity",
        Toast.LENGTH_SHORT).show();

Button button = (Button) findViewById(R.id.button_1);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //MainActivity活动的基础上打开SecondActivity活动,显示intend启动
        Intent intent = new Intent(MainActivity.this, SecondActivity.class);
        startActivity(intent);
    }
});

隐式Intent

AndroidManifest
在<activity>标签下配置<intent-filter>的内容,指定当前活动能够响应的action和category
每个Intent只能指定一个action,但可以指定多个category
<activity android:name=".ThirdActivity"
        android:label="ThirdActivity">
        <!--使用隐式Intent,actioncategory都匹配上时才会响应-->
        <intent-filter>
            <action android:name="com.example.myactivitytest.MY_Action" />
            <!--DEFAULT是默认category,调用startActivity时会自动将这个category添加到Intend-->
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="com.example.myactivitytest.MY_CATEGORY" />
        </intent-filter>
    </activity>
</application>

SecondActivity
Toast.makeText(SecondActivity.this, "SecondActivity",
        Toast.LENGTH_SHORT).show();

Button button = (Button) findViewById(R.id.button_1);
button.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v) {
        //隐式intent启动ThirdActivity
        Intent intent = new Intent("com.example.myactivitytest.MY_Action");
        intent.addCategory("com.example.myactivitytest.MY_CATEGORY");
        startActivity(intent);
    }
});

当然,也可Android系统内置的动作启动其他程序的活动,如Intent.ACTION_VIEW启动系统浏览器。


数据的传递

向下个活动传递消息

若要向下个活动传递数据,可直接通过Intent的putExtra方法及相应的get方法获取
//向下个活动传递数据
String data = "Hello SecondActivity";
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("extra_data", data);    //将数据暂存在intent,(name,value);

//读取上个活动传递的数据
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
Log.d("SecondActivity", data);


返回数据给上个活动

由于返回上个活动并不需要一个Intent来启动活动,所以数据的传递相应的要麻烦些。

使用startActivityForResult方法启动活动,这个方法可以在活动销毁时返回一个结果给上一个活动
//返回数据给上一个活动
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
//请求码只要是唯一值即可,之后回调中判断数据来源
startActivityForResult(intent, 1);
在启动的活动中,通过setResult方法返回数据
public void onClick(View v) {
    Intent intent = new Intent();
    intent.putExtra("data_return", "Hello FirstActivity");
    //(处理结果,带有数据的intent)
    //处理结果一般只使用RESULT_OKRESULT_CANCELED
    setResult(RESULT_OK, intent);
    //销毁活动
    finish();
}
由于是通过startActivityForResult方法启动活动的,在启动的活动被销毁后会回调上一个活动的onActivityResult方法,因此,可通过重写该方法获得返回的数据
//得到上个返回的数据
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch(requestCode) {
        case 1:
            if(resultCode == RESULT_OK) {
                String returnedData = data.getStringExtra("data_return");
                if(returnedData != null) {
                    Log.d("FirstActivity", returnedData);
                } else {
                    Log.d("FirstActivity", "return is null");
                }
            }
            break;
        default:
    }
}


猜你喜欢

转载自blog.csdn.net/qq_34902684/article/details/78429413