通过BaseAdapter创建自定义适配器。在所有的适配器中,通过BaseAdapter定义的适配器非常好用,可以自定义ListView每行布局的样式,使用非常的广泛,是开发过程中必不可少的。
下面看一个效果图:
接下来一起来实现聊天列表:
1.主布局代码:
<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.example.baseadapterdemo.MainActivity" >
<RelativeLayout
android:id="@+id/relativeLayout"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#fc424c"
android:padding="3dp"
android:paddingLeft="5dp"
android:paddingRight="5dp" >
<TextView
android:id="@+id/text2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="列表"
android:textColor="#fff"
android:textSize="25sp" />
</RelativeLayout>
<ListView
android:id="@+id/main_listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/relativeLayout"
android:divider="#f00"
></ListView>
</RelativeLayout>
2.建立一个xml布局,是listView每行的布局:
<?xml version="1.0" encoding="utf-8"?>
<!--行布局文件-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:padding="4dp"
android:orientation="vertical" >
<ImageView
android:padding="3dp"
android:id="@+id/item_img"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/item_time"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:gravity="center"
android:text="时间" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toLeftOf="@id/item_time"
android:layout_toRightOf="@id/item_img"
android:layout_alignParentTop="true"
android:orientation="vertical" >
<TextView
android:id="@+id/item_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_vertical"
android:textSize="20sp"
android:text="张三" />
<TextView
android:textSize="14sp"
android:id="@+id/item_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_vertical"
android:text="在做什么呢?" />
</LinearLayout>
</RelativeLayout>
3.创建一个实体类,用于封装数据:
每行布局中包括一个图片、姓名、聊天内容、时间,所以要将这几个数据进行封装
package com.example.vo;
/**
* 实体类
* 将行布局的内容进行封装
* @author Dell
*
*/
public class ListVO {
//图片
private int mImg;
//姓名
private String mName;
//内容
private String mContent;
//时间
private String mTime;
//无参
public ListVO() {
super();
}
//有参
public ListVO(int mImg, String mName, String mContent, String mTime) {
super();
this.mImg = mImg;
this.mName = mName;
this.mContent = mContent;
this.mTime = mTime;
}
//setter,getter
public int getmImg() {
return mImg;
}
public void setmImg(int mImg) {
this.mImg = mImg;
}
public String getmName() {
return mName;
}
public void setmName(String mName) {
this.mName = mName;
}
public String getmContent() {
return mContent;
}
public void setmContent(String mContent) {
this.mContent = mContent;
}
public String getmTime() {
return mTime;
}
public void setmTime(String mTime) {
this.mTime = mTime;
}
}
a.定义2个参数(context,和List<实体类>),通过构造方法进行赋值.
b.重写4个方法。
①getCount()方法,返回动态数组中有多少数据。
②getView()方法,,通过LayoutInflater对象绑定行布局文件,创建出一个View对象;通过View对象findViewByID()获得行布局控件,设置文本与图片; 返回View对象。
5.主类
package com.example.adapter;
/**
* 自定义适配器。
*/
import java.util.List;
import com.example.baseadapterdemo.R;
import com.example.vo.ListVO;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class MyBaseAdapter extends BaseAdapter{
//定义两个参数,一个是Context对象,一个是ListVO实体类型动态数组
private Context mContext;
private List<ListVO> mList;
//有参构造
public MyBaseAdapter(Context mContext, List<ListVO> mList) {
super();
this.mContext = mContext;
this.mList = mList;
}
//总行数
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
//布局
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView == null) {
view = LayoutInflater.from(mContext).inflate(R.layout.item_main, null);
}else {
view = convertView;
}
//绑定布局
ImageView img = (ImageView) view.findViewById(R.id.item_img);
TextView name = (TextView) view.findViewById(R.id.item_name);
TextView content = (TextView) view.findViewById(R.id.item_content);
TextView time = (TextView) view.findViewById(R.id.item_time);
//设置内容
img.setImageResource(mList.get(position).getmImg());
name.setText(mList.get(position).getmName());
content.setText(mList.get(position).getmContent());
time.setText(mList.get(position).getmTime());
return view;
}
}
5.主类
a.声明适配器控件并绑定ID;
b.声明自定义适配器并实例化;
c.添加数据;
d.绑定适配器。
package com.example.baseadapterdemo;
import java.util.ArrayList;
import java.util.List;
import com.example.adapter.MyBaseAdapter;
import com.example.vo.ListVO;
/**
* 主类
*/
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.widget.ListView;
public class MainActivity extends Activity {
//适配器控件ListView
private ListView mListView;
//适配器
private MyBaseAdapter mAdapter;
//动态数组
private List<ListVO> mList = new ArrayList<ListVO>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
bindID();
//添加数据
addData();
//实例化适配器
mAdapter = new MyBaseAdapter(MainActivity.this, mList);
//绑定适配器
mListView.setAdapter(mAdapter);
}
private void addData() {
//创建对象
ListVO v1 = new ListVO(R.drawable.a1, "张三", "最近在做什么事情呢", "11:11");
ListVO v2 = new ListVO(R.drawable.a2, "李四", "王五说她不爱我了", "12:21");
ListVO v3 = new ListVO(R.drawable.a3, "王五", "我抛弃了他", "13:13");
ListVO v4 = new ListVO(R.drawable.a4, "赵六", "哈哈哈", "14:41");
ListVO v5 = new ListVO(R.drawable.a5, "小明", "适配器好简单", "16:06");
ListVO v6 = new ListVO(R.drawable.a6, "小刚", "6666666666", "18:11");
ListVO v7 = new ListVO(R.drawable.a7, "李华", "英语作文被我包了", "18:51");
//添加到数组
mList.add(v1);
mList.add(v2);
mList.add(v3);
mList.add(v4);
mList.add(v5);
mList.add(v6);
mList.add(v7);
//置为空
v1 = null;
v2 = null;
v3 = null;
v4 = null;
v5 = null;
v6 = null;
v7 = null;
}
//绑定id
private void bindID() {
mListView = (ListView) findViewById(R.id.main_listView);
}
}
这样就完成了。
文件打包:http://download.csdn.net/detail/qq_26239671/9715728