自定义Adapter实现列表功能

最后的效果图就是这样的,其实这个效果的话用SimpleAdapter也是可以实现的,但是为了学习自定义adapter还是重新写了一个。

首先我们应该有每一个列表项布局的xml文件

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="wrap_content" >
 5
 6
 7
 8     <TextView
 9         android:id="@+id/tv_2"
10         android:layout_width="wrap_content"
11         android:layout_height="wrap_content"
12         android:layout_toRightOf="@+id/tv_1"
13          android:layout_centerVertical="true"
14          android:layout_marginLeft="40dip"
15          android:textSize="20sp"
16         android:text="我是签名" />
17
18     <TextView
19         android:id="@+id/tv_1"
20         android:layout_width="wrap_content"
21         android:layout_height="wrap_content"
22         android:layout_toRightOf="@+id/iv"
23         android:layout_centerVertical="true"
24         android:layout_marginLeft="20dip"
25         android:textSize="15sp"
26         android:textColor="#9d0f31"
27         android:text="我是名字" />
28
29     <ImageView
30         android:id="@+id/iv"
31         android:layout_width="80dip"
32         android:layout_height="80dip"
33         android:src="@drawable/ic_launcher" />
34
35 </RelativeLayout>

还要有一个只有listviwe的xml文件

 1 <ListView xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:id="@+id/lv"
 6    >
 7
 8
 9
10 </ListView>

好了这时候我们就要新写一个adapter来继承我们的BaseAdapter

 1 package com.example.listviewwx2;
 2
 3 import java.util.List;
 4
 5 import com.example.listviewwx2.bean.FriendBean;
 6
 7 import android.content.Context;
 8 import android.view.View;
 9 import android.view.ViewGroup;
10 import android.widget.BaseAdapter;
11 import android.widget.ImageView;
12 import android.widget.SimpleAdapter;
13 import android.widget.TextView;
14
15 public class FriendAdapter extends BaseAdapter {
16
17     private List<FriendBean> data;// 传进来数据这是必须的
18     private Context context;// 这个是上下文,为了让里面的控件有获得资源的能力
19
20     public FriendAdapter(List<FriendBean> data, Context context) {
21         this.data = data;
22         this.context = context;
23
24     }
25
26     @Override
27     // 返回的视图数量
28     public int getCount() {
29         return data.size();//这里我们根据传进来list来返回
30     }
31
32     @Override
33     // 根据position获取item的数据
34     public Object getItem(int position) {
35         return data.get(position);
36     }
37
38     @Override
39     // 根据position返回item的ID
40     public long getItemId(int position) {
41         return position;
42     }
43
44     @Override
45     // 返回视图,这个方法很主要
46     public View getView(int position, View arg1, ViewGroup arg2) {
47         View view = View.inflate(context, R.layout.lisviewt_item1, null);
48         FriendBean fb = data.get(position);                     //获得封装对象的数据,根据position
49         ImageView img = (ImageView) view.findViewById(R.id.iv); //得到布局下的控件
50         TextView name = (TextView) view.findViewById(R.id.tv_1);//得到布局下的控件
51         TextView gexing = (TextView) view.findViewById(R.id.tv_2);
52         img.setImageResource(fb.getImgID());                     //给这个控件加入图片,资源就是从封装数据的对象中得到的
53         name.setText(fb.getName());
54         gexing.setText(fb.getGexing());
55         return view;
56     }
57
58 }

好了这个方法写完了,然后我们就要着手把adapter和Llistview绑定,但是我们首先要解决一个问题,我们怎么能够把图片和两个字符串传给list,这时候我们就需要一个对象来封装这三个数据了,然后把这个对象添加到集合里面去。

 1 package com.example.listviewwx2;
 2
 3 import java.util.ArrayList;
 4 import java.util.List;
 5
 6 import com.example.listviewwx2.bean.FriendBean;
 7
 8 import android.os.Bundle;
 9 import android.app.Activity;
10 import android.view.Menu;
11 import android.widget.ListView;
12
13 public class MainActivity extends Activity {
14
15     private ListView lv ;
16     @Override
17     protected void onCreate(Bundle savedInstanceState) {
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.activity_main);
20         lv = (ListView) findViewById(R.id.lv);
21
22         FriendAdapter fa = new FriendAdapter(getData(), this);
23         //声明adapter并实例化,
24         lv.setAdapter(fa);
25     }
26     private List<FriendBean> getData() {
27         FriendBean fb = new FriendBean();
28         //声明javabean并且实例化
29         List<FriendBean> list = new ArrayList<FriendBean>();
30         //声明集合
31         for (int i = 0; i < 10; i++) {
32             fb.setImgID(R.drawable.ic_launcher);
33             fb.setGexing("我是小安卓我要成为出色的操作系统");
34             fb.setName("Android");
35             list.add(fb);
36         }
37         return list;
38     }
39
40
41
42 }
 1 package com.example.listviewwx2.bean;
 2
 3 public class FriendBean {
 4     private int imgID;
 5     private String name;
 6     private String gexing;
 7     public int getImgID() {
 8         return imgID;
 9     }
10     public void setImgID(int imgID) {
11         this.imgID = imgID;
12     }
13     public String getName() {
14         return name;
15     }
16     public void setName(String name) {
17         this.name = name;
18     }
19     public String getGexing() {
20         return gexing;
21     }
22     public void setGexing(String gexing) {
23         this.gexing = gexing;
24     }
25
26 }
时间: 2024-08-08 13:52:18

自定义Adapter实现列表功能的相关文章

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

原文网址:http://embed.21ic.com/software/android/201403/31603.html 1 :Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现) . 今天学习了Spinner组件,使用Spinner相当于从下拉列表中选择项目,下面演示一下Spinner的使用(分别使用ArrayAdapter和自定义Adapter实现) (一):使用ArrayAdapter进行适配数据: ①:首先定义一个布局文件: android:

【Android UI】ListView系列二(自定义Adapter订阅新闻栏目)

目标:自定义适配器Adapter实现点击每个item订阅按钮 上一篇介绍了listview的基本属性以及ArrayAdapter和SimpleAdapter的简单实用,链接:listview使用方式基础篇. 今天主要介绍一下自定义adapter,来实现稍微复杂点的功能,今天实现的效果是:类似于listiew展示许多可供订阅的栏目,每个栏目最右端有订阅按钮,用户点击订阅可以订阅该栏目,再次点击可取消订阅,效果图如下,下面我们一步步来实现. 1. 定义主布局文件activity_main.xml 主

【转】Android自定义Adapter的ListView的思路及代码

原文网址:http://www.jb51.net/article/37236.htm Android自定义Adapter的ListView的思路及代码,需要的朋友可以参考一下 在开发中,我们经常使用到ListView这个控件.Android的API也提供了许多创建ListView适配器的快捷方式.例如ArrayAdapter.SimpleAdapter和SimpleCursorAdapter等.但你是否发现,如果采用这些系统自带的适配器,对于事件的响应只能局限在一个行单位.假设一行里面有一个按钮

HTML格式自定义OpenCart邮件模板功能插件

HTML格式自定义OpenCart邮件模板功能插件 HTML格式自定义OpenCart邮件模板功能插件 前台演示网址后台登录信息: 用户名: demo 密码: demo后台演示网址型 号: COC-A0003 ¥100.00 税前: ¥100.00购买所需积分: 80 购买数量: +- * 扩充功能安装:              --- 请选择 ---                          自己安装                                         

Android学习----自定义Adapter实现ListView

前言: 对于ListView而言,自定义的Adapter对于显示复杂的界面有很大的灵活性 .使用自定义的Adapter需要继承BaseAdapter,然后重写getCount(),getView(),getItem,getItemId()4个方法.adapter在绘制listview时是先根据getCount()获得底层数据的个数来判断绘制item的个数,然后通过getView绘制单个item. ListView实现的效果如下: 详细步骤: 1.新建Activity,在对应的布局文件中放置lis

android 自定义adapter和线程结合 + ListView中按钮滑动后状态丢失解决办法

adapter+线程 1.很多时候自定义adapter的数据都是来源于服务器的,所以在获取服务器的时候就需要异步获取,这里就需要开线程了(线程池)去获取服务器的数据了.但这样有的时候adapter的中没有数据. 如下面的代码: 这就是在initData中异步获取服务器的数据,然后实例化adatper,再将adapter赋给listView. 2.initData()中的代码是: 这里线程要睡眠5秒钟,是为了模仿网络的耗时操作 3.Handler: 在Handler中接收到数据后给list赋值后,

自定义ListView实现中间项动态变大的效果(不是自定义Adapter)

为什么强调不是自定义Adapter,因为我这个自定义控件是来源与公司新做的项目,刚开始在百度上找了一圈,都说是自定义ListView ,点进去却是自定义Adaper,有的人就会说你是不是太较真了,自定义Adapter就基本可以实现各种效果了,何必要自定义Listview,今天我做的这个还确实不好用Adapter做,先上效果图,右边的动图来源于左边这个项目中的一个控件. 因为我们的项目中,六个通道的检测过程要同时动态显示,这样位置就要合理调配,因为六个通道采用的布局比较相似,所以当时考虑了Frag

Gallery和自定义Adapter配合使用,实现图片预览

Gallery是一个可以拖动的列表,正中对应的是选中的东西.他和spinner有共同的父类:AbsSpinner 属性: android:animationDuration="1000" 图片切换动画持续时间 android:spacing="8dp"      设置图片之间的间距 android:unselectedAlpha="0.6"   设置没有选择的图片的透明度 <LinearLayout xmlns:android="

自定义Adapter为什么会重复多轮调用getView?——原来是ListView.onMeasure在作祟

相信很多人在使用自定义Adapter的时候都遇到这样的问题: 假设Adapter数据源中只有30个Item,理论上每显示一个新的Item的时候就会调用一次getView,均显示一次的话是要调用getView() 30次的,然而当我们在getView输出Log信息时,前几个会被重复多轮调用,之后每滑动到一个新的Item便会正常调用getView? 针对这个问题,网上很多帖子指明这与ListView的Item的高度计算方法有关,并强调解决该问题的办法是在XML文件里面定义listView的时候需要设