Android客户端开发 之 项目结构介绍

,——-> 管理Activity

——-> Android-Async-Http框架

——-> 自定义回调接口

——-> 实体Bean管理

——-> 解析器管理

——-> 标题栏及Application管理

——-> 常用工具类

其他包在之前介绍网络框架中大致有提到,看如下两个包中的内容:

一个是通用的Adapter和通用的ViewHolder缓存类,一个是自定义的提示框、圆形ImageView、带声音的Toast 。

有时候项目里面有好多好多ListView,记得以前一种傻逼的做法是往 adapter 包中塞各种 OrderAdapter,HistoryAdapter,…… 然后每个 adapter 都是 extends BaseAdapter,如果有一百个Adapter,我去,这他妈是个什么概念。。。。嘿嘿,后来学乖了哟。

CommonAdapter:

package org.gaochun.adapter;import java.util.List;import android.content.Context;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;/** * 通用 Adapter * @author gao_chun * * @param <T> */public abstract class CommonAdapter<T> extends BaseAdapter{protected LayoutInflater mInflater;protected Context mContext;protected List<T> mDatas;protected final int mItemLayoutId;/*** 初始化通用Adapter* @param context 上下文* @param mDatas 需要显示的数据集合* @param itemLayoutId 子布局文件*/public CommonAdapter(Context context, List<T> mDatas, int itemLayoutId){this.mContext = context;this.mInflater = LayoutInflater.from(mContext);this.mDatas = mDatas;this.mItemLayoutId = itemLayoutId;}@Overridepublic int getCount(){return mDatas.size();}@Overridepublic T getItem(int position){return mDatas.get(position);}@Overridepublic long getItemId(int position){return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent){//从ViewHolder中获取控件view,若为空则创建final ViewHolder viewHolder = getViewHolder(position, convertView,parent);Log.i("gao_chun", position+"");convert(viewHolder, getItem(position));return viewHolder.getConvertView();}/*** 抽取出getView中间改变的部分* @param helper holder缓存对象* @param itemBean对象*/public abstract void convert(ViewHolder helper, T item);/*** 获得ViewHolder中的view* @param position* @param convertView* @param parent* @return*/private ViewHolder getViewHolder(int position, View convertView,ViewGroup parent){return ViewHolder.get(mContext, convertView, parent, mItemLayoutId,position);}}ViewHolder:package org.gaochun.adapter;import android.content.Context;import android.graphics.Bitmap;import android.util.SparseArray;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import com.nostra13.universalimageloader.core.ImageLoader;/** * 通用 ViewHolder 缓存类 * @author gao_chun * */public class ViewHolder{private ImageLoader imageLoader = ImageLoader.getInstance();private final SparseArray<View> mViews;private int mPosition;private View mConvertView;private ViewHolder(Context context, ViewGroup parent, int layoutId,int position){this.mPosition = position;this.mViews = new SparseArray<View>();mConvertView = LayoutInflater.from(context).inflate(layoutId, parent,false);mConvertView.setTag(this); // setTag}/*** 拿到一个ViewHolder对象** @param context* @param convertView* @param parent* @param layoutId* @param position* @return*/public static ViewHolder get(Context context, View convertView,ViewGroup parent, int layoutId, int position){if (convertView == null){//创建ViewHolder对象 ,并做View缓存return new ViewHolder(context, parent, layoutId, position);}return (ViewHolder)convertView.getTag();}public View getConvertView(){return mConvertView;}/*** 通过控件的Id获取对于的控件,如果没有则加入views** @param viewId* @return*/public <T extends View> T getView(int viewId){View view = mViews.get(viewId);if (view == null){view = mConvertView.findViewById(viewId);mViews.put(viewId, view);}return (T)view;}/*** 为TextView设置字符串** @param viewId* @param text* @return*/public ViewHolder setText(int viewId, String text){TextView view = getView(viewId);view.setText(text);return this;}/*** 为ImageView设置图片* setImageResource* @param viewId* @param drawableId* @return*/public ViewHolder setImageResource(int viewId, int drawableId){ImageView view = getView(viewId);view.setImageResource(drawableId);return this;}/*** 为ImageView设置图片* setImageBitmap* @param viewId* @param drawableId* @return*/public ViewHolder setImageBitmap(int viewId, Bitmap bm){ImageView view = getView(viewId);view.setImageBitmap(bm);return this;}/*** 为ImageView设置图片* setImageByUrl* @param viewId* @param drawableId* @return*/ /* public ViewHolder setImageByUrl(int viewId, String url){ImageLoader.getInstance(3, Type.LIFO).loadImage(url,(ImageView) getView(viewId));return this;}*/public ViewHolder setImageByUrl(int viewId, String url){imageLoader.displayImage(url,(ImageView)getView(viewId));return this;}public int getPosition(){return mPosition;}}这里还要给大家推荐一个技巧:ListView中按钮监听器 设置 及 优化,有个需要注意的地方是 setTag 可以记录信息。

呼唤你前往另一个地方,过上另一种生活。

Android客户端开发 之 项目结构介绍

相关文章:

你感兴趣的文章:

标签云: