在ListView中经常用到适配器Adapter, android提供的三种Adapter主要有ArrayAdapter,SimpleAdapter,SimpleCursorAdapter,ArraAdapter是简单的字符串适配器,在实际项目中很少会用到(功能太有限),SimpleAdapter可以自定义ListView的每个Item的布局,一般在简单的布局中会考虑使用,而SimpleCursorAdapter主要用于数据库,前两个的数据来源一般都是String[]或者List,后一个的数据来源一般是数据库查询得到的Cursor。

在实际的项目中,尤其listView的每个Item的布局比较复杂的时候,我们一般都要自定义自己的Adapter,要实现自己的Adapter,我们需要继承BaseAdapter类,同时要覆写其中的四个方法:

public int getCount() :该方法返回ListView中要显示的子View的数量;

public Object getItem(int position):该方法返回一个子View,即listView中的一个子条目,也可以返回自己想要的信息。

public long getItemId(int position):该方法根据Item在listview中的位置,返回其id;

public View getView(int position, View convertView, ViewGroup parent) :该方法是最重要的,也是最难理解的了,它返回的是id为position的Item布局文件对应的View,该View中的各组件可以在getView方法中配置其显示。

这里还有一个点需要说明,就是LayoutInflater类,它的inflate()方法可以根据布局文件获得其View返回值,接下来我们就可以取得该View中的各个组件,便可以为其设置资源,从而配置其显示。

一个简单的自定义实现Adapter的代码类如下:

package com.example.activity;   import com.example.activity.R;  import android.app.Activity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView;  public class MenuActivity extends Activity {       private ListView list = null;    @Override  protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.activity_menu);   list = (ListView)findViewById(R.id.list);      MyAdapter mAdapter = new MyAdapter();   list.setAdapter(mAdapter);  }    //自定义Adapter  class MyAdapter extends BaseAdapter{      int[] images = new int[]{     R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,     R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,     R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,     R.drawable.ic_launcher   };   String[] names = new String[]{     "干锅兔肉","水煮牛肉","剁椒鱼头","腊牛肉","藏香鸡",     "蒜茸蒸茄子","小炒肚丝","鳝鱼煨黄瓜","养生健康汤","鲜鱼汤"   };   String[] prices = new String[]{     "28","32","28","32","32",     "28","28","26","20","30"       };    @Override   public int getCount() {    // TODO Auto-generated method stub    return names.length;   }    @Override   public Object getItem(int position) {    // TODO Auto-generated method stub    return null;   }    @Override   public long getItemId(int position) {    // TODO Auto-generated method stub    return position;   }    //该方法返回整个Item的布局View   @Override   public View getView(int position, View convertView, ViewGroup parent) {    // TODO Auto-generated method stub    if(convertView == null){     //根据布局文件获取其view返回值     convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.layout_adapter, null);    }    //获取listview中每个Item布局文件中的的子组件的ID    ImageView image = (ImageView)convertView.findViewById(R.id.image);    TextView name = (TextView)convertView.findViewById(R.id.name_course);    TextView price_number = (TextView)convertView.findViewById(R.id.price_number);          //为对应的Item中的各个组件设置资源,从而配置其显示    image.setImageResource(images[position]);    name.setText(names[position]);    price_number.setText(prices[position]);        return convertView;   }     }   } 

每个Item的布局文件如下:

<?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"     android:orientation="vertical" >           <ImageView          android:id="@+id/image"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_marginLeft="5dip"          android:src="@drawable/ic_launcher"          android:layout_marginTop="3dip" />   <TextView         android:id="@+id/name_course"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_marginLeft="8dip"         android:layout_marginTop="5dip"         android:text="水煮活鱼"         android:layout_below="@id/image"         android:textSize="16sp"/>         <TextView            android:id="@+id/price"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignBottom="@+id/image"            android:layout_marginLeft="15dp"            android:layout_toRightOf="@+id/name_course"            android:text="价格:"            android:textSize="22sp" />          <TextView             android:id="@+id/price_number"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:layout_above="@+id/name_course"             android:layout_centerHorizontal="true"             android:text="48元"             android:textSize="22sp"/>   </RelativeLayout> 

最终的运行效果如下:

程序代写推荐

转载于:https://www.cnblogs.com/java20131201/p/3466789.html

[原]Android之自定义Adapter相关推荐

  1. Android入门第26天-在Android里自定义Adapter

    介绍 在上一篇"SimpleAdapter"章节中,我们看到了把:ListView和Listview内部详细页面进行分离的Adapter的设计手法. 可是,这个SimpleAdap ...

  2. Android之自定义Adapter的ListView

    在开发中,我们经常使用到ListView这个控件. Android 的API也提供了许多创建ListView适配器的快捷方式.例如 ArrayAdapter.SimpleAdapter和SimpleC ...

  3. android 之自定义Adapter的用法

    使用方法: 自定义一个类使其继承BaseAdapter,再在此类中实现四个方法 <1>getCount():得到数据源中元素的个数 <2>getItem(int positio ...

  4. Android适配器以及作用,Android Studio:自定义Adapter(适配器)的一些通俗易懂的理解(以一个简单的聊天界面为例)...

    本文是博主对Adapter(适配器)的一些理解,为了加深对Adapter的理解以及记录自己的阶段学习而写,同时也适合初学者阅读,参考本条博客的逻辑进行学习. 第一  先来看看实现这个程序需要需要创建哪 ...

  5. Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现)

    Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现)

  6. Android自定义Adapter的ListView的思路及代码

    Android自定义Adapter的ListView的思路及代码,需要的朋友可以参考一下 width="650" height="200" align=&quo ...

  7. android 单选框 icon,Android中的普通对话框、单选对话框、多选对话框、带Icon的对话框、以及自定义Adapter和自定义View对话框详解...

    标签: 对话框就是一个AlertDialog,但是一个简单的AlertDialog,我们却可以将它玩出许多花样来,下面我们就来一起总结一下AlertDialog的用法.看看各位童鞋在平时的工作中否都用 ...

  8. Android 自定义Adapter以实现自定义填充ListView的Item

    1>实体类---即ListView中各个Item中填充的内容 package com.demo.cxc.compoundview.com.demo.cxc.entity;import java. ...

  9. android 中自定义安装,Android开发中ListView自定义adapter的封装

    [引入] 我们一般编写listView的时候顺序是这样的: •需要展示的数据集List •为这个数据集编写一个ListView •为这个ListView编写一个Adapter,一般继承自BaseAda ...

最新文章

  1. java一天一次_做JAVA两年,月薪18k,这些自学心得你绝对值得借鉴
  2. 大厂来的水货CTO:低级bug被敲诈50万美元,事后删代码隐藏证据,最后收到死亡威胁...
  3. myeclipse 删除历史工作空间记录
  4. Session——servlet
  5. go语言goroutine的取消
  6. iOS之深入解析类加载的底层原理:类如何加载到内存中
  7. 初试Ajax.Net !
  8. python xml etree_python xml.etree解析xml
  9. 信息奥赛一本通(1120:同行列对角线的格)
  10. spring security 验证码
  11. 快慢指针算法及其应用
  12. 云计算核心技术剖析学习笔记_2
  13. plc原理及应用_一年只一次,百篇电工+PLC技术资料大合集,不看真的亏!
  14. 某享瘦app登录逆向
  15. 如何批量注册域名?批量注册域名流程是什么
  16. [AV1] AV1 帧内预测
  17. 柠檬水健康问题打包解答
  18. MCV使用ExceptionFilter和log4net记录程序异常日志
  19. 一个不错的 在线字体 网站
  20. 30道你不得不会的Elasticsearch面试题【附答案解析】

热门文章

  1. linux top 刷新速度,Linux Top命令使用方法
  2. 2008奥运会比赛时间表
  3. html空格转义字符 %3e,转义字符串
  4. 插入排序(折半查找优化插入排序||希尔排序) _清风明月
  5. Scala之偏函数Partial Function
  6. 云计算包括哪几个层次的服务?云计算的三大服务层次
  7. class org.springframework.scheduling.quartz.CronTriggerBean
  8. 【安全知识分享】燃气场所防爆电气及消防设施安全培训.pptx(附下载)
  9. Cpolar 内网映射安装和使用
  10. 边缘计算 - 云计算厂商的下一个战场