意图的作用:页面的跳转(从一个页面跳转到另一个页面)。
意图的创建:需要哪些参数?首先,从哪个页面跳转到哪个页面;其二,跳转到另一个页面需要携带数据吗。
下面介绍顺序:简单意图、携带数据、
所谓简单意图,即只需要进行页面跳转不携带数据 。
- Intent intent = new Intent();
- intent.setClass(MainActivity.this,SecActivity.class);
- startActivity(intent);
-
- // setClass(Context,Class)
- // Context:跳转前的所在页面上下文
- // Class:目标要跳转的页面的class
下面就是intent对象传数据的相关方法,可以看到我们可以传入很多类型的数据去满足我们的业务需求。下面也将举几个具体的例子。
| 方法 | 数据类型 |
|---|---|
| putExtra(String name, boolean value) | 布尔型 |
| putExtra(String name, byte value) | 字节型 |
| putExtra(String name, char value) | 字符型 |
| putExtra(String name, short value) | 短整型 |
| putExtra(String name, int value) | 整型 |
| putExtra(String name, long value) | 长整型 |
| putExtra(String name, float value) | 浮点型 |
| putExtra(String name, double value) | 双精度浮点型 |
| putExtra(String name, String value) | 字符串型 |
| putExtra(String name, CharSequence value) | 字符序列型 |
| putExtra(String name, Serializable value) | 可序列化对象 |
| putExtra(String name, Parcelable value) | Parcelable 对象 |
| putExtra(String name, Bundle value) | Bundle 对象 |
| putStringArrayListExtra(String name, ArrayList | 字符串列表 |
先介绍页面窗口获取意图的方法,毕竟只有拿到意图我们才能使用intent对象的相关方法拿到传递到当前页面窗口的数据。
Intent intent = getIntent();
这个getIntent()方法是所有窗口页面对象都有的(在内部可以直接调用),因为窗口页面对象都extends AppCompatActivity。
如果没有任何页面传递intent(没有页面跳转),那么getIntent()==null;只有当前页面窗口确实是跳转的目的页面,调用getIntent()才会获取到Intent对象。
| 方法 | 数据类型 |
|---|---|
| getBooleanExtra(String name, boolean defaultValue) | 布尔型 |
| getByteExtra(String name, byte defaultValue) | 字节型 |
| getCharExtra(String name, char defaultValue) | 字符型 |
| getShortExtra(String name, short defaultValue) | 短整型 |
| getIntExtra(String name, int defaultValue) | 整型 |
| getLongExtra(String name, long defaultValue) | 长整型 |
| getFloatExtra(String name, float defaultValue) | 浮点型 |
| getDoubleExtra(String name, double defaultValue) | 双精度浮点型 |
| getStringExtra(String name) | 字符串型 |
| getCharSequenceExtra(String name) | 字符序列型 |
| getSerializableExtra(String name) | 可序列化对象 |
| getParcelableExtra(String name) | Parcelable 对象 |
| getBundleExtra(String name) | Bundle 对象 |
| getStringArrayListExtra(String name) | 字符串列表 |
- // 传递String数据(省略意图创建配置)
- intent.putExtra("name","joden");
-
- // 获取String数据
- Intent intent = getIntent(); // 获取窗口意图对象
- String getName = intent.getStringExtra("name");
- // 发送
- List
cuisineIds = new ArrayList(); // 省略添加数据操作 - intent.putStringArrayListExtra("sendCuisineIds", (ArrayList
) cuisineIds); -
-
- // 获取
- List
cuisineIds = new ArrayList(); - cuisineIds = intent.getStringArrayListExtra("sendCuisineIds");
- // 1. 首先需要引入Serializable接口,使对象可序列化
- public class OrderItem implements Serializable
-
- // 2. 意图添加Serializable型数据
- intent.putExtra("sendOrderItems", (Serializable) orderItems);
-
- // 3. 接受页面获取Serializable型数据
- List
orderItemList = new ArrayList<>(); - orderItemList = (List
) intent.getSerializableExtra("sendOrderItems");
什么是意图回传?
界面1发送intent1=>界面2获取intent1=>界面2发送intent2=>界面1获取intent2
这个过程好像是“下发命令”,要保证:命令的接受者正确性、命令下发者确定接受者已经完成命令。
当然,如果我们自己要实现也是可以的,但内部已有相关方法实现,所以我们学习使用即可,逻辑也很简单。
- // 1. start to skip page with intent and seek for a Result (MainActivity.java)
- Intent intent = new Intent(MainActivity.this,SecondActivity.class);
- this.startActivityForResult(intent,666);
-
-
- // 2. pass back intent (SecondActivity.java)
- Intent intent = new Intent();
- intent.putExtra("username","joden");
- setResult(888,intent);
- finish();
-
- // 3. deal with the intent data is passed back (MainActivity.java)
- @Override
- protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if(requestCode==666&&resultCode==888){
- String getMsg = data.getStringExtra("username");
- Toast.makeText(this,getMsg,Toast.LENGTH_SHORT).show();
- }
- }
下一节将介绍数据存储的相关知识。