发表于: 2018-11-27 23:31:17
0 901
一、今天完成的事情
了解Context
关于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 resultCode, Intent 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_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);//......
}
}
明天的计划
之前一直对接口请求这一块没多去实践,然后在GitHub上找了知乎日报的API,准备那这个练手。明天至少先完成一个可以下拉刷新、上拉加载并可以加载不同布局的新闻列表。
收获
关于startActivityForResult(),之前一直不清楚调用这个方法后结果会传回哪儿,尤其是当Fragment和其所属的
Activity都有onActivityrsult()方法时,今天算是搞清楚了。
评论