发表于: 2018-11-02 21:42:48

0 632


一、今天完成的事情

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 resultCodeIntent data) {
   //如果希望结果传回Fragment,必须加上下面这一句
   super.onActivityResult(requestCoderesultCode,data);
   Log.d("请求码是"requestCode + "");
   Log.d("返回码是"resultCode + "");
   switch (requestCode) {

       case TAKE_PHOTO:


           ......


            break;
       default:
            break;
   }
}   


二、明天计划的事情

      1.提交任务六

      2.去百度地图开放平台注册

    

三、遇到的问题


四、收获

    onActivityResult()

    startActivityForResult()





返回列表 返回列表
评论

    分享到