安卓 日常问题 工作日志16

android 中activity中常见的 传递信息的方法 

startActivityForResult的简单使用总结

1.(1)startActivityForResult(Intent intent, int requestCode);

(2)onActivityResult(int requestCode, int resultCode, Intent data)

(3)setResult(int resultCode, Intent data)

这里 时 (1)发送数据 将数据从activity1传递给 activity2  然后 activity2 通过 (3)将 activity的数据数据传递给activity1 然后 activity1中 使用 (2)去接受 activity传过来的数据 

有点三次握手的感觉 

代码示例 拍照 代码 

(1)Intent intentMap=new Intent(getActivity(), CameraLandFormActivity.class); //数据要传送到的位置
intentMap.putExtra(CameraLandFormActivity.LAND_FROM_ID, landFromIdFragment);//场景id 这里表内为scene_id 这里我们把点id传过去
intentMap.putExtra(CameraLandFormActivity.PROJECT_NAME_ID, projectNameFragment); //当前项目名
intentMap.putExtra(CameraLandFormActivity.LOCATION_MAP, location_map); //当前照片类型id 在initView()中 将它变为watersample + "." + id格式
startActivityForResult(intentMap,TAKE_PHOTO); //换了这借用inttent去传值
然后
CameraLandFormActivity通过如下代码获得数据 
long landFromId = getIntent().getLongExtra(LAND_FROM_ID, -1L); // 这里开始接受 mainactivity 传来的地质点id
projectName = getIntent().getStringExtra(PROJECT_NAME_ID); //获取传过来的项目名称 这个 必须得有 以后再写 目前 先做别的
imagetype_id=getIntent().getStringExtra(IMAGE_TYPE_ID);//获取传过来的imagetype_id
location_map=getIntent().getStringExtra(LOCATION_MAP);//获取传过来的平面图id
然后通过(3) 返回数据 
Intent data = new Intent();
data.putExtra(LAND_FROM_ID, image.getMScenePointId().longValue()); //将地质点id返回到主页面里
data.putExtra(IMG_ID, image.getId().longValue());//将照片id返回
data.putExtra(IMAGE_TYPE_ID, image.getImage_type());//将照片类型id返回 可以是平面图 也可以是照片
data.putExtra(PROJECT_NAME_ID,projectName);//将项目名称返回 表中无项目名 利用id就行 需要项目名称 实景里面可以 这里 不可以 会出现问题
setResult(RESULT_OK, data); //这里是将图片id 和实景id 返回 之前 应该是 mainactivity 返回后 进行判断 onActivityResult()方法里有

然后 activity1 通过 (2)去接受
public void onActivityResult(int requestCode, int resultCode, Intent data){
// Toast.makeText(getActivity(), "返回照片成功", Toast.LENGTH_LONG).show();
if (resultCode == RESULT_OK && requestCode == TAKE_PHOTO) { //为新的场景点拍照的返回函数 这里 是 (1参数是返回码 2 参数是请求码)
long id = data.getLongExtra(CameraLandFormActivity.LAND_FROM_ID, -1L); //并且有senceid 返回 则实现showScene方法
String imageTypeId = data.getStringExtra(CameraLandFormActivity.IMAGE_TYPE_ID);//照片类型
String projectName = data.getStringExtra(CameraLandFormActivity.PROJECT_NAME_ID);//必须查找到项目名
long imgid = data.getLongExtra(CameraLandFormActivity.IMG_ID, -1L); //并且有senceid 返回 则实现showScene方法
}
}

第二种

startActivity(intent);

1.(1)startActivityForResult(Intent intent, int requestCode);

(2)onActivityResult(int requestCode, int resultCode, Intent data)

(3)setResult(int resultCode, Intent data)

这里 时 (1)发送数据 将数据从activity1传递给 activity2  然后 activity2 通过 (3)将 activity的数据数据传递给activity1 然后 activity1中 使用 (2)去接受 activity传过来的数据 

有点三次握手的感觉 

代码示例 拍照 代码 

(1)Intent intentMap=new Intent(getActivity(), CameraLandFormActivity.class); //数据要传送到的位置
intentMap.putExtra(CameraLandFormActivity.LAND_FROM_ID, landFromIdFragment);//场景id 这里表内为scene_id 这里我们把点id传过去
intentMap.putExtra(CameraLandFormActivity.PROJECT_NAME_ID, projectNameFragment); //当前项目名
intentMap.putExtra(CameraLandFormActivity.LOCATION_MAP, location_map); //当前照片类型id 在initView()中 将它变为watersample + "." + id格式
startActivityForResult(intentMap,TAKE_PHOTO); //换了这借用inttent去传值
然后
CameraLandFormActivity通过如下代码获得数据 
long landFromId = getIntent().getLongExtra(LAND_FROM_ID, -1L); // 这里开始接受 mainactivity 传来的地质点id
projectName = getIntent().getStringExtra(PROJECT_NAME_ID); //获取传过来的项目名称 这个 必须得有 以后再写 目前 先做别的
imagetype_id=getIntent().getStringExtra(IMAGE_TYPE_ID);//获取传过来的imagetype_id
location_map=getIntent().getStringExtra(LOCATION_MAP);//获取传过来的平面图id
然后通过(3) 返回数据 
Intent data = new Intent();
data.putExtra(LAND_FROM_ID, image.getMScenePointId().longValue()); //将地质点id返回到主页面里
data.putExtra(IMG_ID, image.getId().longValue());//将照片id返回
data.putExtra(IMAGE_TYPE_ID, image.getImage_type());//将照片类型id返回 可以是平面图 也可以是照片
data.putExtra(PROJECT_NAME_ID,projectName);//将项目名称返回 表中无项目名 利用id就行 需要项目名称 实景里面可以 这里 不可以 会出现问题
setResult(RESULT_OK, data); //这里是将图片id 和实景id 返回 之前 应该是 mainactivity 返回后 进行判断 onActivityResult()方法里有

然后 activity1 通过 (2)去接受
public void onActivityResult(int requestCode, int resultCode, Intent data){
// Toast.makeText(getActivity(), "返回照片成功", Toast.LENGTH_LONG).show();
if (resultCode == RESULT_OK && requestCode == TAKE_PHOTO) { //为新的场景点拍照的返回函数 这里 是 (1参数是返回码 2 参数是请求码)
long id = data.getLongExtra(CameraLandFormActivity.LAND_FROM_ID, -1L); //并且有senceid 返回 则实现showScene方法
String imageTypeId = data.getStringExtra(CameraLandFormActivity.IMAGE_TYPE_ID);//照片类型
String projectName = data.getStringExtra(CameraLandFormActivity.PROJECT_NAME_ID);//必须查找到项目名
long imgid = data.getLongExtra(CameraLandFormActivity.IMG_ID, -1L); //并且有senceid 返回 则实现showScene方法
}
}

第二种

startActivity(intent);

显式启动新的Activity 

Intent intent=new Intent(getActivity(), ShowImageActivity.class);// 查看单张照片
intent.setData(uris.get(position));
intent.putExtra(ShowImageActivity.AZIMUTH_TAG, form.getLandformsImages().get(position).getAzimuth());
startActivity(intent);
这里是传递数据 但是 不要求 返回只是单纯的去传递数据 并启动新的activity


顺便这里我们学习一下 显式和隐式的intent
https://www.cnblogs.com/liaojie970/p/5827433.html 参考文档
https://www.cnblogs.com/shuiyin/p/6550999.html

安卓 日常问题 工作日志16

上一篇:2 微信开发本地代理环境的搭建--实现将内网ip映射到外网


下一篇:CCF 20190902 小明种苹果续