`
bolutes
  • 浏览: 869265 次
文章分类
社区版块
存档分类
最新评论

Android Jamendo开源在线音乐播放器源码分析四 HomeActivity分析

 
阅读更多

HomeActivity的界面如下:


整个界面大体可以分为两个部分:上面的ViewFlipper和下面的ListView


备注一:ViewFlipper

界面的最上面的mViewFlipper中包含了mGallery、mProgressBar、mFailureBar,刚开始以为最上面部分的显示是通过不同状态下设置View的visibility的VISIBLE, INVISIBLE, or GONE.来显示的,看完代码之后才知道是用的ViewFlipper这个空间实现的,代码显得更加清楚。

在onCreate()里面启动一个AsyncTask来加载,根据不同的结果决定显示ViewFlipper的哪部分内容

在这个AsyncTask中进行专辑的加载,在加载时onPreExecute()中mViewFlipper.setDisplayedChild(0);也就是上面xml代码中的(0) Loading部分,然后在doInBackground()中进行专辑的加载,当加载完之后onPostExecute(Album[] albums),然后根据加载专辑是否成功,选择相应的界面,是显示加载成功之后的(1) Gallery还是加载失败之后的(2) Failure。其实这里关键是这个空间ViewFlipper,在API中的解释是:

android.widget.ViewFlipper

Simple ViewAnimator that will animate between two or more views that have been added to it. Only one child is shown at a time. If requested, can automatically flip between each child at a regular interval.

备注二:ListView包含多个Adapter

这个mHomeListView的adapter里面包含mBrowseJamendoPurpleAdapter、mMyLibraryPurpleAdapter了这两个adapter。程序中在onResume()里面调用fillHomeListView()进行listview数据的初始化。

这里将网络数据的adapter:mBrowseJamendoPurpleAdapter和本地数据的adapter:mMyLibraryPurpleAdapter通过SeparatedListAdapter这个继承自BaseAdapter的类将这个两部分的adapter数据统一了起来,在外界调用者看来就只有一个SeparatedListAdapter,看着SeparatedListAdapter如何将两个adapter合二为一并分别给他们添加header的在后面在专门进行分析。

备注三:

在listview的item点击后都会跳到不同的activity中去,唯独只有Most listened这个显示收听的前一百名歌曲的这个item是首先在HomeActivity这个界面成功加载完数据然后才跳到相应的activity的。从用户的角度来说不能跳到了显示前一百名歌曲的Activity然后显示加载的ProgressBar然后加载成功还好要是加载不成功,那么要么返回HomeActivity要么在显示歌曲的界面显示无法获取,而这里是在HomeActivity就加载完了成功就跳转,不成功那么给提示还在HomeActivity这个界面。

这个Top100Task不是通过像之前那样集成AsyncTask来实现的,而是通过集成一个可以被复用的类来实现的private class Top100Task extends LoadingDialog<Void, Playlist>{}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics