jamendo之主界面分析(1)【列表部分】
来源:互联网 发布:网络上cp是什么意思 编辑:程序博客网 时间:2024/04/30 05:30
主要的对象有:
PurpleEntry(这个类是定义每行列表的属性),
//首页上列表的图片资源
private Integer mDrawable;
//显示的标题
private String mText;
//显示标题的资源ID
private Integer mTextId;
//监听器private PurpleListener mListener;
ArrayListAdapter(继承自BaseAdapter)里面定义了一个ArrayList类型的list来存放数据,
PurpleAdapter(这个类是继承自ArrayListAdapter)用来匹配视图,
SeparatedListAdapter(这个类是用来存放各个purpleAdapter,并绑定界面的adapter,继承自BaseAdapter),
下面分析详细过程:
代码中先new出了两个ArrayListAdapter对象来存放不同分组的PurpleEntry(其实就是列表的两个组,BrowseJamendo和MyLibrary),
mBrowseJamendoPurpleAdapter = new PurpleAdapter(this);
mMyLibraryPurpleAdapter = new PurpleAdapter(this);
然后他用两个ArrayList对象来放入各个Purple对象,(每一个ArrayList对象对应一个PurpleAdapter对象)
ArrayList<PurpleEntry> browseListEntry = new ArrayList<PurpleEntry>();
ArrayList<PurpleEntry> libraryListEntry = new ArrayList<PurpleEntry>();browseListEntry.add(new PurpleEntry(R.drawable.list_search, R.string.search, new PurpleListener(){
@Override
public void performAction() {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "启动Search模块", Toast.LENGTH_LONG).show();//SearchActivity.launch(MainActivity.this);
}}));
browseListEntry.add(new PurpleEntry(R.drawable.list_radio,R.string.radio,new PurpleListener(){
@Override
public void performAction() {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "启动Radio模块", Toast.LENGTH_LONG).show();
}}));
browseListEntry.add(new PurpleEntry(R.drawable.list_top,R.string.most_listened,new PurpleListener(){
@Override
public void performAction() {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "启动Most-Listened模块", Toast.LENGTH_LONG).show();}
}));
libraryListEntry.add(new PurpleEntry(R.drawable.list_playlist, R.string.playlists, new PurpleListener(){
@Override
public void performAction() {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "启动PlayList模块", Toast.LENGTH_LONG).show();
}}));
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
libraryListEntry.add(new PurpleEntry(R.drawable.list_download,R.string.download, new PurpleListener(){@Override
public void performAction() {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "启动downLoad模块", Toast.LENGTH_LONG).show();}
}));
}adapter和Arraylist对象一一对应
mBrowseJamendoPurpleAdapter.setMlist(browseListEntry);
mMyLibraryPurpleAdapter.setMlist(libraryListEntry);
把各个PurpleAdapter存放至SeparatedListAdapter对象中:
SeparatedListAdapter separatedAdapter = new SeparatedListAdapter(this);
separatedAdapter.addSection(getString(R.string.browse_jamendo), mBrowseJamendoPurpleAdapter);
separatedAdapter.addSection(getString(R.string.my_library), mMyLibraryPurpleAdapter);
那么这里PurpleAdapter具体是怎么操作的呢?
在PurpleAdapter里面有两个变量:
private Map<String,Adapter> sections = new LinkedHashMap<String,Adapter>();
public final ArrayAdapter<String> headers;headers:用来存放分组的标题(也就是BrowseJamendo和MyLibrary),
sections:用来存放各个组对应下的adapter对象。
在getview的时候当position等于0的时候就得到标题的视图,然后就得到改标题下的每一行视图。
(当第一的标题BrowseJamendo,position=0,执行的是标题视图,size在第一的标题的时候始终是4,当position=4的时候,
就会执行 position -= size;sectionnum++;把position变成0,sectionnum加1,然后进行下一个标题。
for(Object section : this.sections.keySet()) {
Adapter adapter = sections.get(section);
int size = adapter.getCount() + 1;// check if position inside this section
if(position == 0) return headers.getView(sectionnum, convertView, parent);
if(position < size) return adapter.getView(position - 1, convertView, parent);// otherwise jump into next section
position -= size;
sectionnum++;
}
绑定dapter和监听器
mHomeListView.setAdapter(separatedAdapter);
mHomeListView.setOnItemClickListener(mHomeItemClickListener);
监听器:
private OnItemClickListener mHomeItemClickListener = new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int index,
long time) {//相应个歌监听器事件
PurpleListener listener = ((PurpleEntry)adapterView.getAdapter().getItem(index)).getmListener();
if(listener != null){
listener.performAction();
}
}};
至此列表部分分析完成。
- jamendo之主界面分析(1)【列表部分】
- Android Jamendo源码分析之 网络连接模块
- Jamendo源代码情景分析
- Android Jamendo 之 JamendoApplication
- [Jamendo] AlbumAdapter 之 getView
- Android Jamendo开源在线音乐播放器源码分析三 程序首界面
- Jamendo开源在线音乐播放器源码分析播放界面布局
- 高仿网易评论列表效果之界面分析
- 高仿网易评论列表效果之界面分析
- 高仿网易评论列表效果之界面分析(一)
- 源码分析Mms--ConversationList短信主界面会话列表
- Jamendo学习之缓存:RequestCache、ImageCache
- Jamendo学习笔记之:播放流程
- Android Jamendo开源在线音乐播放器源码分析一 jamendo初步认识
- Android Jamendo开源在线音乐播放器源码分析一 jamendo初步认识
- Android Jamendo开源在线音乐播放器源码分析六 对com.teleca.jamendo.api和com.teleca.jamendo.api.impl类的分析
- Jamendo开源在线音乐播放器源码分析(一)
- Jamendo开源在线音乐播放器源码分析(二)
- Linux Shell编程入门
- 删除确认的javaScript方法
- VS2010连接Oracle在查询数据时报"指定的转换无效"
- UML2类框图(Class Diagram)简介以及操作介绍
- 如何添加局域网打印机(网络打印机)?
- jamendo之主界面分析(1)【列表部分】
- Spring AOP 1
- 使用def文件却倒不出函数的解决方法
- 异步访问数据库(经典之一)
- J2ME卡马克算法案例--地图滚屏(附源码)
- gps的冷启动
- SVN MERGE: Unreadable path encountered; access denied
- 算生日是哪天
- TreeView使用示例