1、Adapter
【
/**
* Created by xuyangsheng on 2017/3/26.
* Author : xuyangsheng
* Time : 2017/3/26 22:45
* Name :
* OverView :
* Usage : 打造超级 BaseAdapter
*/
* Created by xuyangsheng on 2017/3/26.
* Author : xuyangsheng
* Time : 2017/3/26 22:45
* Name :
* OverView :
* Usage : 打造超级 BaseAdapter
*/
public abstract class CommonBaseAdapter<
T>
extends BaseAdapter {
private Context mContext ;
private List< T> mDatas ;
public CommonBaseAdapter(Context context ,List< T> datas) {
this. mContext = context ;
this. mDatas = datas ;
}
@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) {
CommonViewHolder holder = CommonViewHolder. getInstance( mContext , R.layout. listview_item , position , convertView , parent) ;
convert( holder , mDatas.get(position)) ;
return holder.getConvertView() ;
}
/**
* 填充 holder 里面控件的数据
* @param holder
* @param bean
*/
public abstract void convert(CommonViewHolder holder , T bean) ;
}
private Context mContext ;
private List< T> mDatas ;
public CommonBaseAdapter(Context context ,List< T> datas) {
this. mContext = context ;
this. mDatas = datas ;
}
@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) {
CommonViewHolder holder = CommonViewHolder. getInstance( mContext , R.layout. listview_item , position , convertView , parent) ;
convert( holder , mDatas.get(position)) ;
return holder.getConvertView() ;
}
/**
* 填充 holder 里面控件的数据
* @param holder
* @param bean
*/
public abstract void convert(CommonViewHolder holder , T bean) ;
}
实现Adapter:
/**
* Created by xuyangsheng on 2017/3/26.
* Author : xuyangsheng
* Time : 2017/3/26 22:50
* Name :
* OverView :
* Usage :
*/
public class CommonAdapter extends CommonBaseAdapter<Bean> {
public CommonAdapter(Context context , List<Bean> datas) {
super(context , datas) ;
}
@Override
public void convert(CommonViewHolder holder , final Bean bean) {
holder.setText(R.id. title , bean.getTitle())
.setText(R.id. desc , bean.getDesc())
.setText(R.id. time , bean.getTime())
.setText(R.id. phone , bean.getPhone()) ;
holder.setImageResource(R.id. timeMake , R.mipmap. ic_launcher) ;
// 这个当布局里面有 checkbox 的时候,复用问题的解决
final CheckBox cb = holder.getView(R.id. checkbox) ;
cb.setChecked(bean.isCheck()) ;
cb.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
bean.setCheck( cb.isChecked()) ;
}
}) ;
}
}
* Created by xuyangsheng on 2017/3/26.
* Author : xuyangsheng
* Time : 2017/3/26 22:50
* Name :
* OverView :
* Usage :
*/
public class CommonAdapter extends CommonBaseAdapter<Bean> {
public CommonAdapter(Context context , List<Bean> datas) {
super(context , datas) ;
}
@Override
public void convert(CommonViewHolder holder , final Bean bean) {
holder.setText(R.id. title , bean.getTitle())
.setText(R.id. desc , bean.getDesc())
.setText(R.id. time , bean.getTime())
.setText(R.id. phone , bean.getPhone()) ;
holder.setImageResource(R.id. timeMake , R.mipmap. ic_launcher) ;
// 这个当布局里面有 checkbox 的时候,复用问题的解决
final CheckBox cb = holder.getView(R.id. checkbox) ;
cb.setChecked(bean.isCheck()) ;
cb.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
bean.setCheck( cb.isChecked()) ;
}
}) ;
}
}
】
2、超级ViewHolder
【
/**
* Created by xuyangsheng on 2017/3/26.
* Author : xuyangsheng
* Time : 2017/3/26 22:42
* Name :
* OverView : 打造超级 Viewholder
* Usage :
*/
public class CommonViewHolder {
private int mPosition ;
/*
* 用于存储 holder 里面的各个 view ,此集合比 map 效率高 , 但 key 必须为 Integer
*/
private SparseArray<View> mViews ;
/**
* 复用的 view
*/
private View convertView ;
private CommonViewHolder(Context context , int position , int layoutId , ViewGroup parent) {
this. mPosition = position ;
mViews = new SparseArray<View>() ;
convertView = LayoutInflater. from(context).inflate(layoutId , parent ,false) ;
convertView.setTag( this) ;
}
public static CommonViewHolder getInstance(Context context ,int layoutId ,int position , View convertView , ViewGroup parent) {
if (convertView == null) {
return new CommonViewHolder(context , position , layoutId , parent) ;
} else {
CommonViewHolder holder = (CommonViewHolder) convertView.getTag() ;
holder. mPosition = position ;
return holder ;
}
}
/**
* 通过 resourceId 获取 item 里面的 view
* @param resourceId 控件的 id
* @return
*/
@SuppressWarnings( "unchecked")
public < T extends View> T getView( int resourceId) {
View view = mViews.get(resourceId) ;
if ( view == null) {
view = convertView.findViewById(resourceId) ;
mViews.put(resourceId , view) ;
}
return ( T) view ;
}
/**
* 为 textview 类型填充内容
* @param resourceId
* @param text
* @return CommonViewHolder
*/
public CommonViewHolder setText( int resourceId ,CharSequence text ) {
((TextView) getView(resourceId)).setText(text) ;
return this;
}
public CommonViewHolder setText( int resourceId ,int resid ) {
((TextView) getView(resourceId)).setText(resid) ;
return this;
}
/**
* 为 ImageView 设置 Bitmap
* @param resourceId
* @param bm
* @return
*/
public CommonViewHolder setBitmap( int resourceId ,Bitmap bm) {
((ImageView)getView(resourceId)).setImageBitmap(bm) ;
return this;
}
public CommonViewHolder setImageDrawable( int resourceId ,Drawable drawable) {
((ImageView)getView(resourceId)).setImageDrawable(drawable) ;
return this;
}
public CommonViewHolder setImageResource( int resourceId ,int resId) {
((ImageView)getView(resourceId)).setImageResource(resId) ;
return this;
}
public View getConvertView() {
return convertView ;
}
/**
* 获取当前 item 的位置
* @return
*/
public int getPosition() {
return mPosition ;
}
}
* Created by xuyangsheng on 2017/3/26.
* Author : xuyangsheng
* Time : 2017/3/26 22:42
* Name :
* OverView : 打造超级 Viewholder
* Usage :
*/
public class CommonViewHolder {
private int mPosition ;
/*
* 用于存储 holder 里面的各个 view ,此集合比 map 效率高 , 但 key 必须为 Integer
*/
private SparseArray<View> mViews ;
/**
* 复用的 view
*/
private View convertView ;
private CommonViewHolder(Context context , int position , int layoutId , ViewGroup parent) {
this. mPosition = position ;
mViews = new SparseArray<View>() ;
convertView = LayoutInflater. from(context).inflate(layoutId , parent ,false) ;
convertView.setTag( this) ;
}
public static CommonViewHolder getInstance(Context context ,int layoutId ,int position , View convertView , ViewGroup parent) {
if (convertView == null) {
return new CommonViewHolder(context , position , layoutId , parent) ;
} else {
CommonViewHolder holder = (CommonViewHolder) convertView.getTag() ;
holder. mPosition = position ;
return holder ;
}
}
/**
* 通过 resourceId 获取 item 里面的 view
* @param resourceId 控件的 id
* @return
*/
@SuppressWarnings( "unchecked")
public < T extends View> T getView( int resourceId) {
View view = mViews.get(resourceId) ;
if ( view == null) {
view = convertView.findViewById(resourceId) ;
mViews.put(resourceId , view) ;
}
return ( T) view ;
}
/**
* 为 textview 类型填充内容
* @param resourceId
* @param text
* @return CommonViewHolder
*/
public CommonViewHolder setText( int resourceId ,CharSequence text ) {
((TextView) getView(resourceId)).setText(text) ;
return this;
}
public CommonViewHolder setText( int resourceId ,int resid ) {
((TextView) getView(resourceId)).setText(resid) ;
return this;
}
/**
* 为 ImageView 设置 Bitmap
* @param resourceId
* @param bm
* @return
*/
public CommonViewHolder setBitmap( int resourceId ,Bitmap bm) {
((ImageView)getView(resourceId)).setImageBitmap(bm) ;
return this;
}
public CommonViewHolder setImageDrawable( int resourceId ,Drawable drawable) {
((ImageView)getView(resourceId)).setImageDrawable(drawable) ;
return this;
}
public CommonViewHolder setImageResource( int resourceId ,int resId) {
((ImageView)getView(resourceId)).setImageResource(resId) ;
return this;
}
public View getConvertView() {
return convertView ;
}
/**
* 获取当前 item 的位置
* @return
*/
public int getPosition() {
return mPosition ;
}
}
】
3、Bean
【
/**
* Created by xuyangsheng on 2017/3/26.
* Author : xuyangsheng
* Time : 2017/3/26 22:52
* Name :
* OverView :
* Usage :
*/
public class Bean {
private String title ;
private String desc ;
private String phone ;
private String time ;
public Bean(String pTitle , String pDesc , String pPhone , String pTime) {
title = pTitle ;
desc = pDesc ;
phone = pPhone ;
time = pTime ;
}
// 这个当布局里面有 checkbox 的时候,复用问题的解决
private boolean isCheck ;
// 略去 get/set 等 ...
public String getTitle() {
return title ;
}
public void setTitle(String pTitle) {
title = pTitle ;
}
public String getDesc() {
return desc ;
}
public void setDesc(String pDesc) {
desc = pDesc ;
}
public String getPhone() {
return phone ;
}
public void setPhone(String pPhone) {
phone = pPhone ;
}
public String getTime() {
return time ;
}
public void setTime(String pTime) {
time = pTime ;
}
public boolean isCheck() {
return isCheck ;
}
public void setCheck( boolean pCheck) {
isCheck = pCheck ;
}
}
】
4、测试用例
【
public class MainActivity
extends Activity {
private ListView listView ;
private List<Bean> mDatas ;
private CommonAdapter commonAdapter ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState) ;
setContentView(R.layout. activity_main) ;
initDatas() ;
initView() ;
regisetListener() ;
}
@SuppressWarnings( "deprecation")
private void initDatas() {
mDatas = new ArrayList<Bean>() ;
for ( int i = 0 ; i < 20 ; i ++) {
mDatas.add( new Bean( "Android 适配器 " + i , "android 新的征程,新的探索,新的追求! " , "1231212112" + i , new Date().toLocaleString())) ;
}
}
private void initView() {
listView = (ListView) findViewById(R.id. listview) ;
commonAdapter = new CommonAdapter( this, mDatas) ;
listView.setAdapter( commonAdapter) ;
}
private void regisetListener() {
listView.setOnItemClickListener( new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent , View view ,
int position , long id) {
Bean bean = mDatas.get(position) ;
Toast. makeText(MainActivity. this, bean.getTitle() , Toast. LENGTH_SHORT).show() ;
}
}) ;
}
}
private ListView listView ;
private List<Bean> mDatas ;
private CommonAdapter commonAdapter ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState) ;
setContentView(R.layout. activity_main) ;
initDatas() ;
initView() ;
regisetListener() ;
}
@SuppressWarnings( "deprecation")
private void initDatas() {
mDatas = new ArrayList<Bean>() ;
for ( int i = 0 ; i < 20 ; i ++) {
mDatas.add( new Bean( "Android 适配器 " + i , "android 新的征程,新的探索,新的追求! " , "1231212112" + i , new Date().toLocaleString())) ;
}
}
private void initView() {
listView = (ListView) findViewById(R.id. listview) ;
commonAdapter = new CommonAdapter( this, mDatas) ;
listView.setAdapter( commonAdapter) ;
}
private void regisetListener() {
listView.setOnItemClickListener( new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent , View view ,
int position , long id) {
Bean bean = mDatas.get(position) ;
Toast. makeText(MainActivity. this, bean.getTitle() , Toast. LENGTH_SHORT).show() ;
}
}) ;
}
}
】