SwipeBackLayout控件:https://github.com/ikew0ng/SwipeBackLayout/tree/master/library/src/main/java/me/imid/swipebacklayout/lib
其有关的解析:https://segmentfault.com/a/1190000002977515
ViewHolder的相关库:https://github.com/liaohuqiu/cube-sdk/tree/master/core/src/in/srain/cube/views/list
MultiItemRowListAdapter的来源: https://github.com/umano/MultiItemRowListAdapter/tree/master/src/com/sothree/multiitemrowlistadapter
blur模糊算法代码:http://www.oschina.net/question/1377710_151988
(模糊耗时大,所以使用jni) 涉及到jni调用知识:https://segmentfault.com/a/1190000004062899
progressBar开源库:http://www.open-open.com/lib/view/open1421247004625.html
android开源项目汇总:https://github.com/Trinea/android-open-project
瀑布流源码( PinterestLikeAdapterView):https://github.com/GDG-Korea/PinterestLikeAdapterView
谷歌Volley源码:https://github.com/soyoungboy/Volley
遗憾的是Volley没有实现处理json数据的请求,因此我们需要实现自己的Request,自定义Request需要继承Request,可以仿照源码中实现Request(接口)的方式,来模仿者来编写。具体可以参考:http://blog.youkuaiyun.com/guolin_blog/article/details/17482095
为了结合Gson+Volley+okHttp使用,可以参考:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0720/3209.html
关于使用OKHttp处理Volley底层Http请求,参考: http://www.jcodecraeer.com/plus/view.php?aid=3203
音频播放参考:http://www.itnose.net/detail/6090452.html
优酷视频播放的类PlayerActivity:使用singleTask模式(如果在栈中已经有Activity实例,那么就重用这个activity),也即,第一次打开这个activity时,是正常创建onCreate()->onStart() ->onResume(),但是当第二次重用这个activity时,就不再调用onCreate()了,而是,newIntent()->onRestart() ->onStart() ->onResume()
,
因此当传递intent参数时,需要在onCreate()里以及onNewIntent() 里面均要做处理。
Activity的四种启动模式: 1. standard 默认启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。 2. singleTop 如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。 3. singleTask 如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。 4. singleInstance 在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。
Fragment嵌套Fragment时,有bug,需要用反射做一些调整。代码的反映在BaseLazyFragment 的onDetach()方法里。
activity A嵌套fragment B,B嵌套fragment C,C跳转到activity D,当activity D被finish掉之后,C中容易爆出getActivity为空.
如果一个Fragment保存的视图状态为Null并且用户可见提示为true,那么'result' bundle(要保存的Bundle)会有一个微博初始化的值,然后导致空指针异常。
这个Exception是由什么原因造成的呢?如果想知道造成异常的原因,那就必须去看Fragment的相关代码,发现Fragment在detached之后都会被reset掉,但是它并没有对ChildFragmentManager做reset,所以会造成ChildFragmentManager的状态错误。
找到异常出现的原因后就可以很容易的去解决问题了,我们需要在Fragment被detached的时候去重置ChildFragmentManager,即:
@Override
public void onDetach() {
super.onDetach();
try {
Field childFragmentManager = Fragment.class
.getDeclaredField("mChildFragmentManager");
childFragmentManager.setAccessible(true);
childFragmentManager.set(this, null);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
Case 2:当我们从一个Activity启动了一个Fragment,然后在这个Fragment中又去实例化了一些子Fragment,在子Fragment中去有返回的启动了另外一个Activity,即通过startActivityForResult方式去启动,这时候造成的现象会是,子Fragment接收不到OnActivityResult,如果在子Fragment中是以getActivity.startActivityForResult方式启动,那么只有Activity会接收到OnActivityResult,如果是以getParentFragment.startActivityForResult方式启动,那么只有父Fragment能接收(此时Activity也能接收),但无论如何子Fragment接收不到OnActivityResult。
这是一个非常奇怪的现象,按理说,应该是让子Fragment接收到OnActivityResult才对,究竟是什么造成的呢?这是由于某位写代码的员工抱怨没发奖金,稍稍偷懒了,少写了一部分代码,没有考虑到Fragment再去嵌套Fragment的情况。
但是如果我们需要在OnActivityResult的时候处理一些事情的话,我们可以通过在子Fragment中以getParentFragment.startActivityForResult的方式来启动,然后在父Fragment中去接收数据,我们需要在子Fragment中提供一个方法,如:getResultData(Object obj),通过父Fragment中的子Fragment实例去调用这个方法,把相应的数据传过去,然后去更新子Fragment。