Android Jamendo开源在线音乐播放器源码分析八 Adapter的分析

本文详细介绍了如何在项目中使用自定义的ArrayListAdapter来管理各种Adapter,包括其内部实现细节和如何设置Adapter的基本属性。同时,文章还分享了ProgressBar在Adapter中的应用,展示了如何将它作为评分系统使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目的代码中有一个包com.teleca.jamendo.adapter专门存放使用到的所有Adapter,这样确实方便管理,当然代码里面最好的还是这些Adapter的集成关系,是代码清晰而且容易复用。所有的Adapter都是集成自这个抽象的自定义的ArrayListAdapter

/** * Nice wrapper-abstraction around ArrayList * * @author Lukasz Wisniewski * * @param <T> */ public abstract class ArrayListAdapter<T> extends BaseAdapter{ protected ArrayList<T> mList; protected Activity mContext; protected ListView mListView; public ArrayListAdapter(Activity context){ this.mContext = context; } @Override public int getCount() { if(mList != null) return mList.size(); else return 0; } @Override public Object getItem(int position) { return mList == null ? null : mList.get(position); } @Override public long getItemId(int position) { return position; } @Override abstract public View getView(int position, View convertView, ViewGroup parent); public void setList(ArrayList<T> list){ this.mList = list; notifyDataSetChanged(); } public ArrayList<T> getList(){ return mList; } public void setList(T[] list){ ArrayList<T> arrayList = new ArrayList<T>(list.length); for (T t : list) { arrayList.add(t); } setList(arrayList); } public ListView getListView(){ return mListView; } public void setListView(ListView listView){ mListView = listView; } } 正如作者所说Nice wrapper-abstraction around ArrayList很好的封装了ArrayList的抽象类

/** * Adapter representing albums * * @author Lukasz Wisniewski */ public class AlbumAdapter extends ArrayListAdapter<Album> { public AlbumAdapter(Activity context) { super(context); } @Override public View getView(int position, View convertView, ViewGroup parent) { View row=convertView; ViewHolder holder; if (row==null) { LayoutInflater inflater = mContext.getLayoutInflater(); row=inflater.inflate(R.layout.album_row, null); holder = new ViewHolder(); holder.image = (RemoteImageView)row.findViewById(R.id.AlbumRowImageView); holder.albumText = (TextView)row.findViewById(R.id.AlbumRowAlbumTextView); holder.artistText = (TextView)row.findViewById(R.id.AlbumRowArtistTextView); holder.progressBar = (ProgressBar)row.findViewById(R.id.AlbumRowRatingBar); row.setTag(holder); } else{ holder = (ViewHolder) row.getTag(); } holder.image.setDefaultImage(R.drawable.no_cd); holder.image.setImageUrl(mList.get(position).getImage(),position, getListView()); holder.albumText.setText(mList.get(position).getName()); holder.artistText.setText(mList.get(position).getArtistName()); holder.progressBar.setMax(10); holder.progressBar.setProgress((int) (mList.get(position).getRating()*10)); return row; } /** * Class implementing holder pattern, * performance boost * * @author Lukasz Wisniewski */ static class ViewHolder { RemoteImageView image; TextView albumText; TextView artistText; ProgressBar progressBar; } } 当使用时:

AlbumAdapter albumAdapter = new AlbumAdapter(SearchActivity.this);
albumAdapter.setList(albums);
albumAdapter.setListView(mSearchListView);
也就是设置父类里面的三个属性的值

protected ArrayList<T> mList;
protected Activity mContext;
protected ListView mListView;

备注:ProgressBar的一点新的发现

holder.progressBar.setMax(10);
holder.progressBar.setProgress((int) (mList.get(position).getRating()*10));

原来ProgressBar可以当rating来使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值