发表于: 2018-12-13 21:10:19

0 768


一、今天完成的事情

      关于Context,官方给出的解释 

       Interface to global information about an application environment. This is an abstract class whose implementation is provided by the          Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.

        Context提供了关于应用环境全局信息的接口。它是一个抽象类,它的执行被Android系统所提供。它允许获取以应用为特征的资源和类型,是一个统领一些资源(应用程序环境变量等)的上下文。就是说,它描述一个应用程序环境的信息(即上下文);是一个抽象类,Android提供了该抽象类的具体实现类;通过它我们可以获取应用程序的资源和类(包括应用级别操作,如启动Activity,发广播,接受Intent等)。

                                                                

      结合网上的各种博文,从Android系统的角度来理解:Context是一个场景,描述的是一个应用程序环境的信息,即上下文,代表与操作系统的交互的一种过程;从程序的角度上来理解:Context是个抽象类,而Activity、Service、Application等都是该类的一个实现。


onActivityResult()

    如果需要在Activity中得到新打开Activity关闭后返回的数据,就要使用系统提供的startActivityForResult()方法打开新的Activity,新的Activity关闭后会向前面的Activity传回数据,为了得到传回的数据,须在前面的Activity中重写

onActivityResult(int requestCode, int resultCode,Intent data)方法。

最初接触到onActivityResult是在调用相机拍照的时候处理相机返回的结果,启动相机的过程就是从当前活动跳转到相机活动的过程,相机活动的拍摄结果返回到启动相机活动的活动中进行处理。

@Override
protected void onActivityResult(int requestCode, int resultCodeIntent data) {
   Log.d("请求码是"requestCode + "");
   Log.d("返回码是"resultCode + "");
   switch (requestCode) {
       case TAKE_PHOTO:
           showFragmentFL.setVisibility(GONE);
           glassView.setVisibility(GONE);
           if (resultCode == RESULT_OK)

                //拍摄成功

            });
            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;
         }
}


SecondActivity中

......

//任务执行完毕后返回数据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_OUTPUTimageUri);
//如果希望调用Activity中的onActivityResult(),需要加上getActivity(),也就是将结果传回Activity
getActivity().startActivityForResult(intentrequestCode);


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);

           //......

   }
}   

二、遇到的问题

项目中的支付逻辑一直没看明白


三、明天的计划

继续做支付


四、收获

关于startActivityForResult(),之前一直不清楚调用这个方法后结果会传回哪儿,尤其是当Fragment和其所属的Activity都有onActivityrsult()方法时。



返回列表 返回列表
评论

    分享到