将优化后的BaseAdapter封装成一个通用的万能适配器,第一次的封装还不够完善,以后将改进和优化.
package com.xspacing.commonadapter;
import java.util.ArrayList;
import java.util.List;
import com.xspacing.commonadapter.CommonAdapter.OnListenerView;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends Activity {
protected static final String TAG = "MainActivity";
private ListView listView;
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
final List<Student> list = new ArrayList<Student>();
listView = (ListView) findViewById(R.id.main_listview);
// 添加假数据
for (int i = 0; i < 20; i++) {
Student student = new Student();
if (i % 2 == 0) {
student.name = i + ".阳澄湖大闸蟹";
student.desc = "9月23日正式开湖";
student.reId = R.drawable.a25;
} else {
student.name = i + ".特大新闻";
student.desc = "上海将举行xxx的演唱会";
student.reId = R.drawable.a26;
}
list.add(student);
}
CommonAdapter<Student> commonAdapter = new CommonAdapter<Student>(mContext, list, R.layout.item_list_view);
// 接口回调,获取position和ViewHolder对象
commonAdapter.setOnListenerView(new OnListenerView() {
@Override
public void ViewChange(ViewHolder mHolder, int position) {
// 设置参数
mHolder.SetText(list.get(position).desc, R.id.main_tv_desc);
mHolder.SetText(list.get(position).name, R.id.main_tv_name);
mHolder.setImageResource(list.get(position).reId, R.id.main_img);
}
});
listView.setAdapter(commonAdapter);
// 监听每个item
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getApplicationContext(), position + "", Toast.LENGTH_SHORT).show();
}
});
}
}
package com.xspacing.commonadapter;
public class Student {
public String name; // 标题
public int reId; // 图片ID
public String desc;// 描述
public Student(String name, String desc, int reId) {
this.name = name;
this.desc = desc;
this.reId = reId;
}
public Student() {
}
}
package com.xspacing.commonadapter;
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;
/**
*
* @ClassName CommonAdapter.java
* @Description 定制一个简单的万能适配器
* @author Smile
* @version v1.0
* @date 2016年9月21日 上午10:45:17
*/
public class CommonAdapter<T> extends BaseAdapter {
private static final String TAG = "CommonAdapter";
List<T> list;
Context mContext;
ViewHolder mHolder = null;
int layoutId;
public CommonAdapter() {
}
public CommonAdapter(Context mContext, List<T> list, int layoutId) {
this.list = list;
this.mContext = mContext;
this.layoutId = layoutId;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public interface OnListenerView {
void ViewChange(ViewHolder mHolder, int position);
}
OnListenerView listener;
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(layoutId, parent, false);
mHolder = new ViewHolder(convertView);
convertView.setTag(mHolder);
Log.i(TAG, "新生资源");
} else {
Log.i(TAG, "复用资源");
mHolder = (ViewHolder) convertView.getTag();
}
listener.ViewChange(mHolder, position);
return mHolder.getConvertView();
}
public void setOnListenerView(OnListenerView listener) {
this.listener = listener;
}
}
package com.xspacing.commonadapter;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.util.SparseArray;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
/**
*
* @ClassName ViewHolder.java
* @Description 将布局的控件封装成一个类
* @author Smile
* @version v1.0
* @date 2016年9月21日 上午11:06:29
*/
public class ViewHolder {
View mConvertView;
SparseArray<View> mViews; // 类似于一个Map<Integer,View>
public ViewHolder(View convertView) {
this.mConvertView = convertView;
mViews = new SparseArray<View>();
}
public View getConvertView() {
return mConvertView;
}
public void SetText(String content, int layoutId) {
TextView tv = (TextView) getView(layoutId);
tv.setText(content);
}
public void setImageResource(int resId, int layoutId) {
ImageView imageView = (ImageView) getView(layoutId);
imageView.setImageResource(resId);
}
public void setImageBitmap(Bitmap bitmap, int layoutId) {
ImageView imageView = (ImageView) getView(layoutId);
imageView.setImageBitmap(bitmap);
}
public void setImageDrawable(Drawable drawable, int layoutId) {
ImageView imageView = (ImageView) getView(layoutId);
imageView.setImageDrawable(drawable);
}
// 防止重复取id
public Object getView(int layoutId) {
View view = mViews.get(layoutId);
if (view == null) {
view = mConvertView.findViewById(layoutId);
mViews.put(layoutId, view);
}
return view;
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.xspacing.commonadapter.MainActivity" >
<ListView
android:id="@+id/main_listview"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp" >
<ImageView
android:id="@+id/main_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical"
android:padding="5dp" >
<TextView
android:id="@+id/main_tv_name"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/main_tv_desc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="2dp" />
</LinearLayout>
</LinearLayout>