ListView通用适配器
来源:互联网 发布:淘宝格子铺能卖出去么 编辑:程序博客网 时间:2024/05/20 20:55
1.通用适配器CommonAdapter.java,代码如下:
package com.gucc.contacts.widget;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;/** * * @author: guc * @create_time:2017年5月9日 下午3:38:48 * @类描述:通用Adapter * @version: * */public abstract class CommonAdapter<T> extends BaseAdapter { protected LayoutInflater mInflater; protected 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 T 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, getItem(position),position); return viewHolder.getConvertView(); } public abstract void convert(ViewHolder helper, T item,int position); private ViewHolder getViewHolder(int position, View convertView, ViewGroup parent) { return ViewHolder.get(mContext, convertView, parent, mItemLayoutId, position); } }
2.通用ViewHolder.java
package com.gucc.contacts.widget;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;/** * * @author: guc * @create_time:2017年5月9日 下午3:31:31 * @类描述:通用的ViewHolder类 * @version: * */public class ViewHolder { private final SparseArray<View> mViews; private View mConvertView; private int mPosition; 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(); } /** * 通过控件的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; } public View getConvertView() { return mConvertView; } /** * 为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 * @param drawableId * @return */ public ViewHolder setImageBitmap(int viewId, Bitmap bm) { ImageView view = getView(viewId); view.setImageBitmap(bm); return this; } /** * 为ImageView设置图片 加载网络图片 * * @param viewId * @param drawableId * @return */ public ViewHolder setImageByUrl(int viewId, String url) { Picasso.with(getContext()) .load(url) .placeholder( new ColorDrawable(Color.parseColor("#f5f5f5"))) .into((ImageView )getView(viewId)); return this; } public int getPosition() { return mPosition; } /** * 显示或隐藏控件 * @param viewId * @param visibility */ public void setVisibility(int viewId, int visibility){ View view = getView(viewId); view.setVisibility(visibility); }}
3.1使用可在java代码中直接使用
//获取到Adapter对象,对ListView.setAdapter(mAdapter);即可mAdapter = new CommonAdapter<String>(getApplicationContext(), R.layout.item_single_str, mDatas) { @Override protected void convert(ViewHolder viewHolder, String item) { viewHolder.setText(R.id.id_tv_title, item); } };
3.2创建UserAdapter继承CommonAdapter:
package com.gucc.contacts;import android.content.Context;import android.view.View;import java.util.List;import com.gucc.contacts.User;import com.gucc.contacts.widget.CommonAdapter;import com.gucc.contacts.widget.ViewHolder;/** * * @author: guc * @create_time:2017年5月8日 上午9:58:48 * mAdapter = new UserAdapter<>(this, mDatas, R.layout.item); * mListview.setAdapter(mAdapter); */public class UserAdapter<T> extends CommonAdapter<T> { private List<User> users; private User user; @SuppressWarnings("unchecked") public UserAdapter(Context context, List<T> mDatas,int itemLayoutId) { super(context, mDatas,itemLayoutId); this.mContext = context; this.users = (List<User>) mDatas; } @Override public void convert(ViewHolder helper, T item,int position) { user = (User) item; helper.setText(R.id.name, user.getName()); }}
4.参考:打造万能的ListView GridView 适配器
优化:ViewHolder类中增加了setVisibility(int viewId, int visibility)方法用来设置控件的显示情况。
修改:ViewHolder类中setImageByUrl(int viewId, String url)方法改为用Picasso来加载网络图片。Picasso.jar下载
0 0
- ListView通用适配器
- Android Listview通用适配器
- listview、gridview通用适配器
- ListView通用适配器
- ListView、GrideView通用适配器
- ListView 通用适配器
- listview通用适配器和RecyclerView通用适配器
- 【Android笔记】 通用ListView适配器
- 通用的ListView GridView适配器
- Android 通用ListView、GridView适配器
- Android Listview通用适配器BaseCommAdapter
- Android ListView的通用适配器Adapter
- Android 开发技巧-Listview通用适配器BaseCommAdapter
- 编写通用的Listview、gridview的适配器
- 23—自定义ListView【通用】适配器并实现监听控件
- 自定义ListView【通用】适配器并实现监听控件!
- 自定义ListView【通用】适配器并实现监听控件!
- Android 快速开发系列 万能通用的ListView GridView 适配器
- bzoj2618: [Cqoi2006]凸多边形
- CODE[VS] 青铜Bronze 整数处理 1202:求和
- Windows 钩子函数
- 年轻 ——塞缪尔·乌尔曼
- 程序4--日期是一年的第几天
- ListView通用适配器
- Wireshark基本介绍和学习TCP三次握手
- Qt学习之路(37): Qt容器类之关联存储容器
- 常用三方
- Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core"
- HTML转义字符大全
- iOS_隐藏顶部状态栏方式
- 并发与并行的区别
- 禁用WebDAV-tomcat