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