发表于: 2018-11-02 21:42:48
0 797
一、今天完成的事情
onActivityResult()
如果需要在Activity中得到新打开Activity关闭后返回的数据,就要使用系统提供的startActivityForResult()方法打开新的Activity,新的Activity关闭后会向前面的Activity传回数据,为了得到传回的数据,须在前面的Activity中重写
onActivityResult(int requestCode, int resultCode,Intent data)方法。
最初接触到onActivityResult是在调用相机拍照的时候处理相机返回的结果,启动相机的过程就是从当前活动跳转到相机活动的过程,相机活动的拍摄结果返回到启动相机活动的活动中进行处理。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("请求码是", requestCode + "");
Log.d("返回码是", resultCode + "");
switch (requestCode) {
case TAKE_PHOTO:
showFragmentFL.setVisibility(GONE);
glassView.setVisibility(GONE);
if (resultCode == RESULT_OK)
/*
Bitmap bitmap = BitmapFactory.decodeStream(
getContentResolver().openInputStream(imageUri));
*/
//压缩图片
ImageCompress.compressWithLuban(photoPath);
imageCompress.setLubanListener(new ImageCompress.LubanListener() {
@Override
public void onSuccess(String newPath) {
ImageViewUtil.displayImage(showPhotoCIV, newPath);
compressPhotoPath = newPath;
}
@Override
public void onFailed() {
}
});
break;
default:
break;
}
}
相机返回数据的过程系统已经设置好了,但很多时候需要从我们自己写的活动中返回数据,这就要自己去写返回流程了。
比如在FirstActivity中启动了SecondActivity去执行任务,SencondActivity执行任务完毕后返回数据data给
FirstActivity处理。
FirstActivity中
//定义一个请求码RequsetCode
final int REQUESTCODE
.....
//启动SecondActivity
Intent intent = new Intent();
intent.setClass(FirstActivity.this, SecondActivity.class);
//这里用到了一个startActivityForResult()方法,和onActivityRequest()方法相对应
startActivityForResult(intent, REQUESTCODE);
......
//复写onActivityResult()接收SecondActivity返回的数据
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
switch(requestCode) {
case REQUESTCODE:
if (resultCode == RESULT_OK) {
//处理data
......
}
break;
}
}
SecondActivit中
......
//任务执行完毕后返回数据data
Intent intent = new Intent();
intent.outExtra("key", data);
setresult(Activity.RESULT_OK, intent);
Fragment和onActivityResult()
在Fragment中使用startActivityForResult()方法
1.希望将结果会返回到Fragment所属的Activity的onActivityResult()中
(1)在Activity中复写onActivityResult()f方法
(2)在Fragment使用startActivityForResult()时加上getActivity
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
//如果希望调用Activity中的onActivityResult(),需要加上getActivity(),也就是将结果传回Activity
getActivity().startActivityForResult(intent, requestCode);
2.希望将结果会返回到Fragment中,而不是Activity的onActivityResult()中
在Fragment中复写onActivityResult()f方法,注意加上super.onActivityResult(requestCode, resultCode,data);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//如果希望结果传回Fragment,必须加上下面这一句
super.onActivityResult(requestCode, resultCode,data);
Log.d("请求码是", requestCode + "");
Log.d("返回码是", resultCode + "");
switch (requestCode) {case TAKE_PHOTO:
......
break;
default:
break;
}
}
二、明天计划的事情
1.提交任务六
2.去百度地图开放平台注册
三、遇到的问题
四、收获
onActivityResult()
startActivityForResult()
评论