android之通过BaseAdapter自定义适配器的使用

来源:互联网 发布:网络教育报名流程 编辑:程序博客网 时间:2024/05/16 03:41
通过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,getterpublic 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;}}


4.创建自定义适配器类,继承BaseAdapter:
a.定义2个参数(context,和List<实体类>),通过构造方法进行赋值.
b.重写4个方法。
①getCount()方法,返回动态数组中有多少数据。
②getView()方法,,通过LayoutInflater对象绑定行布局文件,创建出一个View对象;通过View对象findViewByID()获得行布局控件,设置文本与图片; 返回View对象。
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;}//总行数@Overridepublic int getCount() {return mList.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}//布局@Overridepublic 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 {//适配器控件ListViewprivate ListView mListView;//适配器private MyBaseAdapter mAdapter;//动态数组private List<ListVO> mList = new ArrayList<ListVO>();@Overrideprotected 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;}//绑定idprivate void bindID() {mListView = (ListView) findViewById(R.id.main_listView);}}

这样就完成了。

文件打包:http://download.csdn.net/detail/qq_26239671/9715728





1 0
原创粉丝点击