Jamendo学习笔记之五:Adpter框架
2012-05-22 15:52:43 来源:WEB开发网Jamendo中大量使用了Adaper,Adaper的继承关系如下图所示:
为了解其设计的过程,将分别沿几条线路分析。
(一) HomeActivity中TitleBar(ImageAdapter)的加载过程,涉及相关Adapter如下图所示:
从服务端获取数据之后,将数据给Gallery,代码如下:
public void onPostExecute(Album[] albums) {
if(albums != null && albums.length > 0){
mViewFlipper.setDisplayedChild(1);
ImageAdapter albumsAdapter = new ImageAdapter(HomeActivity.this);
albumsAdapter.setList(albums);
mGallery.setAdapter(albumsAdapter);
mGallery.setOnItemClickListener(mGalleryListener);
mGallery.setSelection(albums.length/2, true); // animate to center
} else {
mViewFlipper.setDisplayedChild(2);
mFailureBar.setOnRetryListener(new OnClickListener(){
@Override
public void onClick(View v) {
new NewsTask().execute((Void)null);
}
});
mFailureBar.setText(R.string.connection_fail);
}
super.onPostExecute(albums);
}
1, 单击setList(),进入ArrayListAdapter中,代码如下:
public void setList(T[] list){
ArrayList<T> arrayList = new ArrayList<T>(list.length);
for (T t : list) {
arrayList.add(t);
}
setList(arrayList);
}
A,使用了泛型,扩大了此类的使用范围,其继承类复用很多代码。
B, setList()方法重载,先将解析封装好的T[]传进来,再将T[]中每一个元素存入ArrayList中。代码如下:
public void setList(ArrayList<T> list){
this.mList = list;
notifyDataSetChanged();//刷新ui
}
C, 定义了抽象方法getView()。继承类中只需要实现其即可。经常写adapter就回知道,继承BaseAdapter需要implements四个方法,其中最主要的code内容在getView()方法中完成。在ArrayListAdapter中写一个抽象方法,继承类只需要实现getView方法,并完成其内部的代码即可。如上面的adpter tree diagram所示,ArrayListAdapter有六个子类,简化了代码。
@Override
abstract public View getView(int position, View convertView, ViewGroup parent);//抽象方法
D,设置数据之后,即notifyDataSetChanged()刷新。显然是在重新封装成arrayList之后。
public void setList(ArrayList<T> list){
this.mList = list;
notifyDataSetChanged();//刷新ui
}
E, 此setListView()方法,暂时还没发现有什么用。如果以后遇到,再补充。
2, ImageAdapter的item其实很简单。就一个图片。继承AlbumAdapter,直接重载getView()方法。在内部写实现代码。仅在于简化代码。两者关系并不密切。AlbumAdapter仅比ImageAdapter复杂一点,ImageAdapter中getView()代码如下:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
RemoteImageView i;
if (convertView == null) {
更多精彩
赞助商链接