android4.4的文件管理器documentsui源码解析
2016-02-18 17:31
489 查看
泡在网上的日子 发表于2014-08-23 11:55, 第 4567 次阅读 文件
摘要 本文主要多android4.4中出现的documentsui理出一条分析的线索。从源码的角度做一些简单的分析。在4.4以上的版本中如果通过如下的Intent调用Activity:mState.action == ACTION_GET_CONTENT表示调用documentsui的人想获得的是文件系统的内容,也就是说本文开始那样的调用方式将会转到这个条件中来,执行
ACTION_CREATE,中的show方法:[/code]ACTION_MANAGE等,目前不清楚这些功能具体做什么。[code]回到mState.action == ACTION_GET_CONTENT这个条件中,他调用了[code]RootsFragment
RootsFragment自己,其实
RootsFragment就是DrawerLayout的菜单部分。点击某个菜单之后(如图片)右边的目录树做相应的切换,那么这个过程是如何进行的呢?在
RootsFragment中,菜单列表是一个ListView当然点击菜单就会进入到listvIew的
OnItemClickListener中:
RootItem类型,这里我们不去研究用户点击应用程序的情况。当用户点击的是文件类型(如图片)菜单,则会调用
DocumentsActivity的onRootPicked:[/code]
这里又有一个条件分支,判断了是否是“最近”菜单(isRecentsRoot,注意比照上面的界面图),如果是则执行[code]
new
PickRootTask(root).executeOnExecutor(getCurrentExecutor());不是则调用
onCurrentDirectoryChanged方法。因为分支过多我只研究最基本的,也就是列出目录文件的功能所以忽略“最近”菜单被点击的情况,进入到
onCurrentDirectoryChanged中(其实反之最终也还是要进入到onCurrentDirectoryChanged中),很烦的是
onCurrentDirectoryChanged中又有很多分支情况,但可以肯定的是
列出目录文件的功能是调用
DirectoryFragment.showNormal(fm, root, cwd, anim);
完成的。所以我的重点就在DirectoryFragment这个类中了。
我想了解在DirectoryFragment中是如何列出文件和目录 同时是如何显示缩略图的。
DirectoryFragment
是使用loader机制来加载内容的。getLoaderManager().restartLoader(mLoaderId, null, mCallbacks);
其中mCallbacks如下:
onLoadFinished)会将结果
result传递给
mAdapter:
mAdapter.swapResult(result),这个result的类型是DirectoryResult。上面说了我想知道文件或者目录的缩略图是如何加载的,所以需要了解这个[code]
mAdapter的内部情况。[/code]
mAdapter的声明如下:
private DocumentsAdapter mAdapter;
DocumentsAdapter 是的一个内部类,我直接跳到他的getview方法:[code]
DirectoryFragment
getDocumentView,其中有这样的一段代码:
thumbs这个ThumbnailCache中获取缓存图片,定义如下
ThumbnailAsyncTask。然后再继续分析
ThumbnailAsyncTask吧 总之这是一个很繁琐的过程。本文只是理出一条分析的线索,希望对大家还是有所帮助。
相关文章推荐
- 关于build-tools位置不一致问题
- 调用顺序正确,仍然出现Android异常:requestFeature() must be called before adding content
- UGUI之Canvas
- Android Download机制详解(一)DocumentUI部分
- UITabbarController更改点击的图片与文字颜色以及更改tabbar的视图颜色
- CodeForces 283A Cows and Sequence 树状数组
- MiniUI之(一)简介
- Error:failed to find Build Tools revision 23.0.2
- Retrieving a Key by a Value--by Tim O'Brien 整理by博主
- Qt工程文件中QT -= core gui与Config-=qt的区别
- AddressBookUI AddressBook Contacts简单使用
- iOS获取UUID,并使用keychain存储
- Spoj 2713 Can you answer these queries IV 水线段树
- 简单的EasyUI登录界面
- jsp:EL之$(pageContext.request.contextPath)和$(requestScope.contextPath)区别
- UITableView优化技巧
- Android学习笔记之:android更新ui的几种常用方法
- 禁止uiscrollview垂直方向滚动,只允许水平方向滚动;或只允许垂直方向滚动
- 第三章 解决UI 线程运行无响应问题
- [LeetCode 063] Unique Paths II