日报2015/10/11(极客学院安卓视频学习)
2015-10-11 12:41
302 查看
在 Activity 跳转过程中的生命周期
总结了一下:
从A跳到B,A
B
若是B没有完全遮挡住A,例如B是一个dialog的话,
在 Activity 之间传递参数
从MainActivity通过Intent跳转到B,需要
而B中可以通过
Bundle对象获取字符串的时候有一个重载的方法:
这样若是Bundle中没有这个key的value,则取出的是默认值。
与Intent对应的取值:
传递值对象
如果不对对象进行任何处理,那么
所以,应该对实体对象进行处理:两种方式
A:
B:
User类要重写两个方法,其中
另外,还要在User里写一个
A:
B:
后者是安卓为开发者提供的序列化方法,不使用系统序列化机制,速度较快,虽然操作复杂了些。
获取 Activity 的返回参数
在B的按钮处:使用
而在A中,要想接收到返回值就不能通过
要使用
并且A中要重写一个方法来对返回数据进行处理
这里的data就是B中返回的那个intent,那么通过它就能取到B中EditText的值
也就是说关键在于(限于幅面参数省略)
A:
B:
总结了一下:
从A跳到B,A
onPause()后不会马上执行
onStop(),而是要等到
B
onCreate(),onStart(),onResume()之后再执行
onStop();
若是B没有完全遮挡住A,例如B是一个dialog的话,
onStop()便不会执行了。
在 Activity 之间传递参数
从MainActivity通过Intent跳转到B,需要
new Intent(MainActivity.this,B.class),
而B中可以通过
getIntent()来取得它们之间这个桥梁
Intent,并且取到保存的键值对参数。
Bundle对象获取字符串的时候有一个重载的方法:
getString("键名","若不存在时的默认值")
这样若是Bundle中没有这个key的value,则取出的是默认值。
与Intent对应的取值:
putExtra("key",Bundle)—
getBundleExtra("key")
putExtras(Bundle)—
getExtras()
传递值对象
如果不对对象进行任何处理,那么
intent.putExtra("user",new User("jackie",21));
所以,应该对实体对象进行处理:两种方式
1、implements Serializable
A:
intent.putExtra("user",new User("jackie",21));
B:
intent.getSerializableExtra("user");//此处注意是Serializable
2、implements Parcelable
User类要重写两个方法,其中
@Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(age); }
parcelable没有自动序列化的机制需要我们手动实现,如上
另外,还要在User里写一个
public static final Creator<User> CREATOR = new Creator<User>() { @Override public User createFromParcel(Parcel in) { return new User(in); } @Override public User[] newArray(int size) { return new User[size]; } };
A:
intent.putExtra("user",new User("jackie",21));
B:
intent.getParcelableExtra("user");//此处注意是Parcelable
后者是安卓为开发者提供的序列化方法,不使用系统序列化机制,速度较快,虽然操作复杂了些。
获取 Activity 的返回参数
在B的按钮处:使用
setResult()方法,并且新声明一个intent
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(); intent.putExtra("BName",editText.getText().toString()); setResult(1,intent); } });
而在A中,要想接收到返回值就不能通过
startActivity(intent);
要使用
startActivityForResult(intent,0);//0表示一种两者交互的行为
并且A中要重写一个方法来对返回数据进行处理
onActivityResult(int requestCode, int resultCode, Intent data)
这里的data就是B中返回的那个intent,那么通过它就能取到B中EditText的值
String name=data.getStringExtra("BName"); textView.setText(name);
也就是说关键在于(限于幅面参数省略)
A:
startActivityForResult(),
onActivityResult()
B:
setResult();
相关文章推荐
- Servlet3.1应用生命周期事件 (转载)
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件