有时候使用ArrayAdapter适配器和SimpleAdapter适配器并不能满足我们的需要,这时就需要我们自定义适配器,下面通过一个实例来演示自定义适配器的使用,实现向ListView组件中添加内容。

Activity:

package com.lovo.activity;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.os.Bundle;import android.widget.ListView;import com.lovo.R;import com.lovo.adapter.LazyListAdapter;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.lazybook_layout);// 显示文本的字符串数组String[] textAry = new String[] { "英语学习", "财经时评", "纯乐梵音", "搞笑娱乐","广播剧场", "最新影视", "保健养身", "明星八卦" };// 实例化自定义适配器对象LazyListAdapter adapter = new LazyListAdapter(this, textAry,R.layout.lazybook_listview_content);// 得到ListView组件ListView listView = (ListView) findViewById(R.id.listView1);// 设置ListView的内容listView.setAdapter(adapter);}}


自定义适配器类:

package com.lovo.adapter;import android.app.Activity;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import com.lovo.R;/** * 自定义适配器 *  * @author guyun *  */public class LazyListAdapter extends BaseAdapter {/** 显示文本的字符串数组 */private String[] textAry;/** Activity对象 */private Activity activity;/** 每一行布局资源文件的ID */private int resourceId;public LazyListAdapter(Activity activity, String[] textAry, int resourceId) {this.activity = activity;this.textAry = textAry;this.resourceId = resourceId;}@Overridepublic int getCount() {return textAry.length;}@Overridepublic Object getItem(int arg0) {return textAry[arg0];}@Overridepublic long getItemId(int position) {return position;}/** * position:每次需要绘制组件的序号 。convertView:放在listView或gridView中每一行的View对象 * parent:当前这行组件的父组件对象 */@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {ViewHolder holder = null;// 如果首次绘制没有convertView,则通过布局资源文件进行创建if (convertView == null) {// 得到每一行的布局资源文件convertView = activity.getLayoutInflater().inflate(resourceId, null);// 实例化ViewHolder对象holder = new ViewHolder();// 为holder添加内容holder.textView = (TextView) convertView.findViewById(R.id.lazybook_listview_textView1);holder.button = (Button) convertView.findViewById(R.id.button1);// 将组件的缓存对象保存到convertViewconvertView.setTag(holder);} else {// 从convertView中取出缓存对象holder = (ViewHolder) convertView.getTag();}// 设置每一行内组件的内容holder.textView.setText(textAry[position]);holder.button.setText(textAry[position]);// 为按钮注册监听holder.button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 利用Toast弹出简易提示消息Toast.makeText(activity, "点击了按钮" + textAry[position],Toast.LENGTH_SHORT).show();}});return convertView;}// 利用内部类来创建一个ViewHolder类(类似缓存)private class ViewHolder {public TextView textView;public Button button;}}


布局XML:

<?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="match_parent" >    <RelativeLayout        android:id="@+id/relativeLayout1"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignParentTop="true"        android:background="@drawable/title_bg" >        <TextView            android:id="@+id/textView1"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentLeft="true"            android:layout_centerVertical="true"            android:layout_marginLeft="10dp"            android:text="懒人听书"            android:textSize="20sp" />        <ImageView            android:id="@+id/imageView1"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentRight="true"            android:layout_centerVertical="true"            android:layout_marginRight="10dp"            android:src="@drawable/ic_btn_search" />    </RelativeLayout>    <LinearLayout        android:id="@+id/linearLayout1"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_below="@+id/relativeLayout1"        android:background="@drawable/home_online_tab_bg"        android:gravity="center"        android:orientation="horizontal" >        <TextView            android:id="@+id/textView2"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginLeft="15dp"            android:layout_marginRight="15dp"            android:layout_weight="1"            android:background="@drawable/home_online_tab_select"            android:gravity="center"            android:text="分类" />        <TextView            android:id="@+id/textView3"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginLeft="15dp"            android:layout_marginRight="15dp"            android:layout_weight="1"            android:gravity="center"            android:text="最新" />        <TextView            android:id="@+id/textView4"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginLeft="15dp"            android:layout_marginRight="15dp"            android:layout_weight="1"            android:gravity="center"            android:text="最热" />        <TextView            android:id="@+id/textView5"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginLeft="15dp"            android:layout_marginRight="15dp"            android:layout_weight="1"            android:gravity="center"            android:text="推荐" />    </LinearLayout>    <ListView        android:id="@+id/listView1"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_below="@+id/linearLayout1" >    </ListView>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:background="@drawable/home_tab_bg" >        <RelativeLayout            android:layout_width="match_parent"            android:layout_height="match_parent"            android:layout_margin="5dp"            android:layout_weight="1"            android:background="@drawable/home_tab_bg_select"            android:gravity="center_vertical" >            <ImageView                android:id="@+id/imageView2"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_centerHorizontal="true"                android:src="@drawable/home" />            <TextView                android:id="@+id/textView6"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_below="@id/imageView2"                android:layout_centerHorizontal="true"                android:text="在线收听"                android:textColor="#fff" />        </RelativeLayout>        <RelativeLayout            android:layout_width="match_parent"            android:layout_height="match_parent"            android:layout_margin="5dp"            android:layout_weight="1"            android:gravity="center_vertical" >            <ImageView                android:id="@+id/imageView2"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_centerHorizontal="true"                android:src="@drawable/sign_down" />            <TextView                android:id="@+id/textView6"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_below="@id/imageView2"                android:layout_centerHorizontal="true"                android:text="我的下载"                android:textColor="#fff" />        </RelativeLayout>        <RelativeLayout            android:layout_width="match_parent"            android:layout_height="match_parent"            android:layout_margin="5dp"            android:layout_weight="1"            android:gravity="center_vertical" >            <ImageView                android:id="@+id/imageView2"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_centerHorizontal="true"                android:src="@drawable/clock" />            <TextView                android:id="@+id/textView6"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_below="@id/imageView2"                android:layout_centerHorizontal="true"                android:text="收藏·历史"                android:textColor="#fff" />        </RelativeLayout>        <RelativeLayout            android:layout_width="match_parent"            android:layout_height="match_parent"            android:layout_margin="5dp"            android:layout_weight="1"            android:gravity="center_vertical" >            <ImageView                android:id="@+id/imageView2"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_centerHorizontal="true"                android:src="@drawable/arrow" />            <TextView                android:id="@+id/textView6"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_below="@id/imageView2"                android:layout_centerHorizontal="true"                android:text="更多"                android:textColor="#fff" />        </RelativeLayout>    </LinearLayout></RelativeLayout>


ListView中每一行布局的XML:

<?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="wrap_content"    android:paddingBottom="15dp"    android:paddingTop="15dp" >    <ImageView        android:id="@+id/imageView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_marginLeft="15dp"        android:src="@drawable/disc" />    <TextView        android:id="@+id/lazybook_listview_textView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerVertical="true"        android:layout_marginLeft="10dp"        android:layout_toRightOf="@id/imageView1"        android:text="TextView"        android:textSize="20sp" />    <ImageView        android:id="@+id/imageView2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentRight="true"        android:layout_centerVertical="true"        android:layout_marginRight="20dp"        android:src="@drawable/right_arrow" />     <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerVertical="true"        android:layout_toRightOf="@id/lazybook_listview_textView1"         /></RelativeLayout>


附上图片效果:

更多相关文章

  1. android froyo framework内RIL.java类分析
  2. android之xml对象到json对象的转化
  3. Android(安卓)ApiDemos示例解析(40):App->Service->Local Service
  4. 使用Android(安卓)AlarmManager类定时执行任务
  5. RN(react-native)踩坑实录--编写项目
  6. [安卓开发Android][叠层 层叠 卡片效果]RecyclerView与CardView
  7. Android9.0版本Vold服务源码分析之上层处理SD卡挂载
  8. 第18天android:《android从零开始》视频(22-23)数据存储
  9. android的日积月累-监听短信

随机推荐

  1. Android中的访问权限
  2. Android(安卓)OnGestureListener
  3. [Android]静态广播监听器
  4. Android(安卓)TextView SpannableString
  5. [置顶] Why your Android(安卓)Apps Suck
  6. Android(安卓)震动功能
  7. android 退出整个APP
  8. Android(安卓)Button使用,ArrayList使用练
  9. android 自定义View 滚动选择器PickerVie
  10. android左右滑动翻页查看图片