前言
意图的作用:页面的跳转(从一个页面跳转到另一个页面)。
意图的创建:需要哪些参数?首先,从哪个页面跳转到哪个页面;其二,跳转到另一个页面需要携带数据吗。
下面介绍顺序:简单意图、携带数据、
简单意图
所谓简单意图,即只需要进行页面跳转不携带数据 。
java
Intent intent = new Intent();
intent.setClass(MainActivity.this,SecActivity.class);
startActivity(intent);
// setClass(Context,Class)
// Context:跳转前的所在页面上下文
// Class:目标要跳转的页面的class
携带数据
下面就是intent对象传数据的相关方法,可以看到我们可以传入很多类型的数据去满足我们的业务需求。下面也将举几个具体的例子。
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<String> value) | 字符串列表 |
intent数据获取
先介绍页面窗口获取意图的方法,毕竟只有拿到意图我们才能使用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类型
java
// 传递String数据(省略意图创建配置)
intent.putExtra("name","joden");
// 获取String数据
Intent intent = getIntent(); // 获取窗口意图对象
String getName = intent.getStringExtra("name");
ArrayList<String>类型
java
// 发送
List<String> cuisineIds = new ArrayList<String>(); // 省略添加数据操作
intent.putStringArrayListExtra("sendCuisineIds", (ArrayList<String>) cuisineIds);
// 获取
List<String> cuisineIds = new ArrayList<String>();
cuisineIds = intent.getStringArrayListExtra("sendCuisineIds");
List<Object>类型
java
// 1. 首先需要引入Serializable接口,使对象可序列化
public class OrderItem implements Serializable
// 2. 意图添加Serializable型数据
intent.putExtra("sendOrderItems", (Serializable) orderItems);
// 3. 接受页面获取Serializable型数据
List<OrderItem> orderItemList = new ArrayList<>();
orderItemList = (List<OrderItem>) intent.getSerializableExtra("sendOrderItems");
意图回传
什么是意图回传?
界面1发送intent1=>界面2获取intent1=>界面2发送intent2=>界面1获取intent2
这个过程好像是"下发命令",要保证:命令的接受者正确性、命令下发者确定接受者已经完成命令。
当然,如果我们自己要实现也是可以的,但内部已有相关方法实现,所以我们学习使用即可,逻辑也很简单。
java
// 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();
}
}
后言
下一节将介绍数据存储的相关知识。