Android的intent

title: Android基础01
date: 2020-02-15 17:17:04
tags:

1、Intent

Intent可以让活动进行跳转。使用方式有两种,一种是显式,另一种是隐式。

1、显示调用

Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivity(intent);

我们首先构建出了一个Intent,传入FirstActivity.this 作为上下文,传入SecondActivity.class 作为目标活动,这样我们的“意图”就非常明显了,即在FirstActivity这个活动的基础上打开SecondActivity这个活动。然后通过startActivity() 方法来执行这个Intent。

2、隐式调用

相比于显式Intent,隐式Intent则含蓄了许多,它并不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的action 和category 等信息,然后交由系统去分析这个Intent,并帮我们找出合适的活动去启动。

通过在<activity> 标签下配置<intent-filter> 的内容,可以指定当前活动能够响应的action 和category

<activity android:name=".SecondActivity" > <intent-filter> <action android:name="com.example.activitytest.ACTION_START" /> <category android:name="android.intent.category.DEFAULT" />
</intent-filter> </activity>

<action> 标签中我们指明了当前活动可以响应

com.example.activitytest.ACTION_START 这个action ,而<category> 标签则包含

了一些附加信息,更精确地指明了当前的活动能够响应的Intent中还可能带有的category 。只

<action><category> 中的内容同时能够匹配上Intent中指定的action 和category

时,这个活动才能响应该Intent。

3、intent返回给上一个活动数据

启动活动时:

button1.setOnClickListener(new View.OnClickListener() { 
@Override public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent, 1);
}
});
这里我们使用了startActivityForResult() 方法来启动SecondActivity,请求码只要是一

个唯一值就可以了,这里传入了1。

接下来是第二个活动的返回数据:

public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.second_layout); 
    Button button2 = (Button) findViewById(R.id.button_2); 
    button2.setOnClickListener(new View.OnClickListener() { 
        @Override public void onClick(View v) { 
            Intent intent = new Intent(); 
            intent.putExtra("data_return", "Hello FirstActivity"); 
            setResult(RESULT_OK, intent); 
            finish(); 
        } 
    }); 
} 
}

由于我们是使用startActivityForResult() 方法来启动SecondActivity的,在

SecondActivity被销毁之后会回调上一个活动的onActivityResult() 方法,因此我们需要在

FirstActivity中重写这个方法来得到返回的数据,如下所示:

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { 
    case 1: 
        if (resultCode == RESULT_OK) {
            String returnedData = data.getStringExtra("data_return");                                Log.d("FirstActivity", returnedData);
        }
        break;
    default: }
}

如果用户是按返回键退出的该活动,那么只需要将第二个活动中的intent代码写到第二个活动的onBackPressed()方法中即可。

猜你喜欢

转载自www.cnblogs.com/wuren-best/p/12313048.html