android通用适配器的封装
来源:互联网 发布:阿里云虚拟主机 编辑:程序博客网 时间:2024/05/19 12:37
Android开发的小伙伴们,肯定会知道一个项目下来写几十个适配器都是普普通通的事情,但是这几十个适配器有很多还是相同的代码所以这就有点蛋疼了,将许多的时间都浪费在了写同样代码的事情上,这无疑不仅是对时间的一个浪费还会导致项目代码的冗余,从而增加维护成本。。鉴于此,通用适配器这一名词就出现在了人们的视线中,我也是近期才去考虑做这些事情找了一些资料再加上一些自己的想法写了一个通用的适配器,仅供大家参考,网上有好多写好的万能适配器但是我发现网上的那些都没有对按钮的监听进行处理,我这里加上了对按钮监听的处理,如果大家有什么更好的实现方式欢迎留言指导。。。下面直接上代码
** * Created by Administrator on 2017/7/10. */public abstract class CommonAdapter<T> extends BaseAdapter { protected LayoutInflater mInflater; protected static Context mContext; protected List<T> mDatas; protected final int mItemLayoutId; public CommonAdapter(Context context, List<T> mDatas,int itemLayoutId) { mInflater = LayoutInflater.from(context); this.mContext = context; this.mDatas = mDatas; this.mItemLayoutId = itemLayoutId; } @Override public int getCount() { return mDatas.size(); } @Override public Object getItem(int position) { return mDatas.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder viewHolder = getViewHolder(position, convertView, parent); convert(viewHolder, (T) getItem(position)); return viewHolder.getConvertView(); } public abstract void convert(ViewHolder helper, T item); private ViewHolder getViewHolder(int position, View convertView, ViewGroup parent) { return ViewHolder.get(mContext, convertView, parent, mItemLayoutId, position); } public static class ViewHolder { private final SparseArray<View> mViews; private int mPosition; private View mConvertView; private OnClickListener mOnItemChangedListener; 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); // setTag mConvertView.setTag(this); } /** * 拿到一个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) { 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设置图片 * * @param viewId * @param drawableId * @return */ public ViewHolder setImageResource(int viewId, int drawableId) { ImageView view = getView(viewId); view.setImageResource(drawableId); return this; } /** * 为ImageView设置图片 * * @param viewId * @return * @paramdrawableId */ public ViewHolder setImageBitmap(int viewId, Bitmap bm) { ImageView view = getView(viewId); view.setImageBitmap(bm); return this; } /** * 为ImageView设置图片 * * @param viewId * @return * @paramdrawableId */ public ViewHolder setImageByUrl(int viewId, String url) {// ImageLoader.getInstance(3, Type.LIFO).loadImage(url,// (ImageView) getView(viewId)); Glide.with(mContext).load(url).into((ImageView) getView(viewId)); return this; } /** * 为按钮设置监听 * @return */ public ViewHolder setOnClickBtn(Button viewId){ viewId.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); return this; } /** * 设置监听 这是对图片监听的设置(换成按钮是一样的逻辑代码) * @return */ public ViewHolder setOnClickImg(int viewId, View.OnClickListener onClickListener){ ImageView view = getView(viewId); view.setOnClickListener(onClickListener); return this; } // 自定义接口 public interface OnClickListener { void onClick(View view); } // 对外提供方法 public void setOnClickListener( OnClickListener listener) { this.mOnItemChangedListener = listener; } public int getPosition() { return mPosition; } } }
至此,我们的适配器就封装完了,相信大家都能看懂这里不做过多解释。。
下面看具体的使用:
在Activity中:
emp_listview.setAdapter(adapter = new CommonAdapter<String>(EmpAddressActivity.this, list, R.layout.emplist_item) { @Override public void convert(ViewHolder helper, String item) { helper.setText(R.id.emp_name, item); helper.setOnClickImg(R.id.emp_message, new View.OnClickListener() { @Override public void onClick(View v) { Util.MyToast(EmpAddressActivity.this, "点击发送消息"); Uri uri2 = Uri.parse("smsto:"+10086); Intent intentMessage = new Intent(Intent.ACTION_VIEW,uri2); startActivity(intentMessage); } }); }});
我这里实现的是点击图片按钮进行发送短信的操作,不管什么逻辑这个通用适配器的使用都是一样的。。。
android渣渣一直在努力希望大家能够给出宝贵的意见建议。。。
阅读全文
0 0
- android通用适配器的封装
- RecyclerView通用适配器Adapter,对Adapter的封装
- 万用适配器(封装通用的基类GeneralAdapter)
- Android ListView的通用适配器Adapter
- android 一个通用的 适配器 adapter
- android 通用适配器
- Android通用适配器
- Android通用适配器
- Android RecyclerView通用适配器
- Android Listview通用适配器
- Android通用适配器CommonAdapter
- android RecyclerView 通用适配器
- Android自定义通用适配器
- Android自定义通用适配器
- android适配器优化封装
- 通用适配器的实现
- 通用的RecyclerView适配器.
- Android 封装一个通用的PopupWindow
- Java 通过 JDBC 连接Mysql
- 1014. Waiting in Line (30)
- ionic环境搭建和安装
- Jtree生成虚拟结点的 增删改查操作
- USBFN Dump Packet Patchset
- android通用适配器的封装
- TCP协议和UDP协议的区别
- SQLServer中把某个表里的记录复制到另一个数据库的表中
- 模拟实现boost库里的智能指针
- kubernetes之Pod详解
- UnicodeDecodeError解决方案
- Bugly Android自动上传符号表
- Android中进程和线程的概念
- Linux 使用 dpkg 安装 Debian 包