ListView实现自定义,利用BaseAdapter
基本实现效果如上
五步走
第一步:创建数据
1.创建一个用户类
public class User { private int userImg; private String name; private String id; private String classid; public User(int userImg, String name, String id, String classid) { this.userImg = userImg; this.name = name; this.id = id; this.classid = classid; } /* * 这里还有成员变量的get和set方法,懒得写就省略了 * */2.定义用户类数据
private User[] user = new User[4]; private int[] img = new int[]{R.mipmap.ic_launcher, R.mipmap.ic_1, R.mipmap.ic_2, R.mipmap.ic_3}; private String[] name = {"张三", "李四", "王五", "马六"}; private String[] id = {"1", "2", "3", "4"}; private String[] classid = {"一班", "二班", "三班", "四班"};
第二步:实现自定义MyAdapter
1.创建MyAdapter继承BaseAdapter
public class MyAdapter extends BaseAdapter {
private Context context;
private List<Map<String, Object>> list;
private User[] user =null;
private LayoutInflater inflater;
public MyAdapter(Context context, List<Map<String, Object>> list, User[] user) {
this.context = context;//跟上下文关联的context对象
this.list = list;
this.user = user;
}
以下重写BaseAdapter的抽象方法
@Override
public int getCount() {
return list.size();//返回list列表的数量
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
这个方法很重要,主要实现了View的显示问题
@Override
public View getView(int position, View convertView, ViewGroup parent) {
zujian zuJian = new zujian();
inflater = LayoutInflater.from(context);从上下文得到(LayoutInflater)布局转换对象
convertView = inflater.inflate(R.layout.base_item, null);//将布局样式文件base_item.xml转换成View视图
zuJian.imageView = (ImageView) convertView.findViewById(R.id.imageView);//从contextView中得到资源Id
zuJian.name = (TextView) convertView.findViewById(R.id.textView);
zuJian.id = (TextView) convertView.findViewById(R.id.textView2);
zuJian.classid = (TextView) convertView.findViewById(R.id.textView3);
对每个资源进行设置
zuJian.imageView.setBackgroundResource(user[position].getUserImg());
zuJian.name.setText(user[position].getName());
zuJian.id.setText(user[position].getId());
zuJian.classid.setText(user[position].getClassid());
return convertView;
}
定义一个有关每项list组建的类
class zujian {
private ImageView imageView;
private TextView name, id, classid;
}
}
第三步:处理List数据
public List<Map<String, Object>> getList() { for (int i = 0; i < 4; i++) { user[i] = new User(img[i], name[i], id[i], classid[i]); map = new HashMap<String, Object>(); map.put("user", user[i]); list.add(map); } return list;第四步 : 创建list item的xml布局文件
<?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="match_parent"
android:orientation="horizontal">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:textSize="40sp" />
<TextView
android:id="@+id/textView2"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_below="@id/textView"
android:layout_centerHorizontal="true"
android:textSize="40sp"/>
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/textView2"
android:layout_centerHorizontal="true"
android:textSize="40sp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/textView3"
android:layout_centerHorizontal="true"
android:gravity="center_horizontal">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="男"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="女"/>
</LinearLayout>
</RelativeLayout>
</LinearLayout>
第五步:listView设置myAdapter
myAdapter = new MyAdapter(this,getList(),user);
listView.setAdapter(myAdapter);