当Fragment与Activity发生关联时调用。
onCreateView(LayoutInflater, ViewGroup,Bundle)
创建该Fragment的视图
onActivityCreated(Bundle)
当Activity的onCreate方法返回时调用
onDestoryView()
与onCreateView想对应,当该Fragment的视图被移除时调用
onDetach()
与onAttach相对应,当Fragment与Activity关联被取消时调用
注意:除了onCreateView,其他的所有方法如果你重写了,必须调用父类对于该方法的实现
onAttach
onCreate : 创建的时候调用
onCreateView: fragment创建的时候调用
onActivityCreated
onStart:看得见的时候调用
onResume:获得焦点的时候调用
2.屏幕灭掉:
onPause:失去焦点时调用
onSaveInstanceState
onStop: 看不见的时候调用
3.屏幕解锁:
onStart
onResume
4.切换到其他Fragment:
onPause
onStop
onDestroyView
5.切换回本身的Fragment:
onCreateView
onActivityCreated
onStart
onResume
6.回到桌面:
onPause
onSaveInstanceState
onStop
7.回到应用
onStart
onResume
8.退出应用
onPause
onStop
onDestroyView
onDestroy:销毁的时候调用
onDetach
注:Fragment是activity 的一个小部分, 生命周期 与 activity的生命周期类似,只是比Activity多了一些生命周期。
在需要嵌套Fragment的activity必须继承Android.support.v4.app.FragmentActivity
嵌套的Fragment必须继承android.support.v4.app.Fragment
//必需继承FragmentActivity,嵌套fragment只需要这行代码
getSupportFragmentManager().beginTransaction().replace(R.id.container,newMyFragment()).commitAllowingStateLoss();
解决:在Framgent B中添加Fragment C 调用add()时先判断fragmentC.isAdded()
FragmentManager fm=getActivity().getSupportFragmentManager();
FragmentTransaction ft=fm.beginTransaction();
if(!sub1Fragment.isAdded()){
ft.add(R.id.rl_fragment_container, sub1Fragment).commit();
}
问题2:修改后发现,Fragment C布局添加失败,同时切换主菜单2时,报错。
解决:这是Fragment的嵌套问题。FragmentB中的嵌套不能再用getActivity().getSupportFragmentManager(),要用getChildFragmentManager()
即上面代码应改为:
FragmentManager fm=getChildFragmentManager();
FragmentTransaction ft=fm.beginTransaction();
if(!sub1Fragment.isAdded()){
ft.add(R.id.rl_fragment_container, sub1Fragment).commit();
}
是Google在2013年Google I/O大会上基于HttpClient + HttpURLConnection来封装的,针对短、频、快的网络请求推出的一款新的网络通信框架,开源的。Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。Volley 的特点:特别适合数据量小,通信频繁的网络操作。
非常适合进行数据量不大,但通信频繁的网络操作。
内部分装了异步线程。
支持get,post网络请求。
图片下载。
可直接在主线程调用服务端并处理返回结果。
可以取消请求,容易扩展,面向接口编程。
缺点对大文件下载 Volley的表现非常糟糕。
只支持http请求。
图片加载性能一般。
使用的是httpclient,HttpURLConnection。不过在android 6.0不支持httpclient了,如果想支持得添加org.apache.http.legacy.jar。
使用方法:1. 创建一个RequestQueue对象。
2. 创建一个StringRequest对象。
3. 将StringRequest对象添加到RequestQueue里面。
RequestQueue mQueue =Volley.newRequestQueue(context);
StringRequest stringRequest =newStringRequest("http://www.baidu.com",
newResponse.Listener<String>(){
@Override
publicvoid onResponse(String response){
Log.d("TAG", response);
}
},newResponse.ErrorListener(){
@Override
publicvoid onErrorResponse(VolleyError error){
Log.e("TAG", error.getMessage(), error);
}
});
mQueue.add(stringRequest);
为了避免在类外使用 new class 来创建对象实体,我们只允许使用我们设定好的公共方法来建立实例
4.2 私有化的静态变量
用于存储类的实例化对象。因为外部只能通过静态方法实例化对象,而存储容器又是在静态方法中被调用的,所以必须是静态的属性
4.3 公共的静态方法
用于存储实例化的对象,供外界获取