前面我介绍了listview控件的不同用法,但是这些用法在实际的开发项目中是不足以满足需求的,因为前面的几种用法只能简单的显示文本信息,而且布局都比较单一,很难做出复杂的结果,在实际的开发项目中,90%以上都是需要自己自定义listview的,这一篇,我们将介绍如何使用自定义布局的listview

先看效果图

好了,其实这种自定义布局的实现,是通过自定义adapter来实现的,首先我们简单介绍下adapter

每个listview要想实现数据的显示,都必须绑定一个adapter,adapter主要实现将数据和listview中的每一个item进行绑定,这样就可以灵活的设计自己的布局了,我们看一下这次的项目目录

现在开始看代码

主界面的布局文件

activity_main.xml

<LinearLayout 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" > <ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="wrap_content" /> </LinearLayout>

item_listview.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" > <ImageView
android:id="@+id/img"
android:layout_width="80dp"
android:layout_height="80dp"
android:padding="10dp"
android:src="@drawable/ic_launcher" /> <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="3dp"
android:layout_marginTop="3dp"
android:gravity="center"
android:text="标题"
android:textSize="20sp" /> <TextView
android:id="@+id/tv2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="3dp"
android:layout_marginTop="3dp"
android:text="简介"
android:textSize="16sp" />
</LinearLayout> </LinearLayout>

实体类thing.java

package com.example.diylistview;

public class Thing {

	private String title;
private String Introduce;
private int picture; public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public String getIntroduce() {
return Introduce;
} public void setIntroduce(String introduce) {
Introduce = introduce;
} public int getPicture() {
return picture;
} public void setPicture(int picture) {
this.picture = picture;
} /**
*
*/
public Thing() {
super();
} /**
* @param title
* @param introduce
* @param picture
*/
public Thing(String title, String introduce, int picture) {
super();
this.title = title;
Introduce = introduce;
this.picture = picture;
} }

MyAdapter.java

package com.example.diylistview;

import java.util.List;

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 MyAdapter extends BaseAdapter { private Context context;
private List<Thing> lists;
private LayoutInflater layoutInflater;
ImageView img;
TextView tv1;
TextView tv2; /**
* 构造函数,进行初始化
*
* @param context
* @param lists
*/
MyAdapter(Context context, List<Thing> lists) {
this.context = context;
this.lists = lists;
layoutInflater = LayoutInflater.from(this.context);
} // 获得长度,一般返回数据的长度即可
@Override
public int getCount() {
return lists.size();
} @Override
public Object getItem(int position) {
return lists.get(position);
} @Override
public long getItemId(int position) {
return position;
} /**
* 最重要的方法,每一个item生成的时候,都会执行这个方法,在这个方法中实现数据与item中每个控件的绑定
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// convertView对象就是item的界面对象,只有为空的时候我们才需要重新赋值一次,这样可以提高效率,如果有这个对象的话,系统会自动复用
//item_listview就是自定义的item的布局文件
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.item_listview, null);
}
//注意findViewById的时候,要使用convertView的这个方法,因为是在它里面进行控件的寻找
img = (ImageView) convertView.findViewById(R.id.img);
tv1 = (TextView) convertView.findViewById(R.id.tv1);
tv2 = (TextView) convertView.findViewById(R.id.tv2);
//将数据与控件进行绑定
img.setBackgroundResource(lists.get(position).getPicture());
tv1.setText(lists.get(position).getTitle());
tv2.setText(lists.get(position).getIntroduce());
return convertView;
} }

MainActivity.java

package com.example.diylistview;

import java.util.ArrayList;
import java.util.List; import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast; public class MainActivity extends Activity implements OnItemClickListener { private ListView listview;
private List<Thing> lists; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(R.id.listview);
//初始化数据
lists = getLists();
//设置适配器
listview.setAdapter(new MyAdapter(this, lists));
//设置监听
listview.setOnItemClickListener(this);
}
//返回数据
private List<Thing> getLists() {
List<Thing> lists = new ArrayList<Thing>();
for (int i = 0; i < 20; i++) {
Thing thing = new Thing();
thing.setPicture(R.drawable.ic_launcher);
thing.setTitle("我是标题" + i);
thing.setIntroduce("我是简介" + i);
lists.add(thing);
}
return lists;
}
//item的点击监听时间
@Override
public void onItemClick(AdapterView<?> view, View arg1, int position,
long arg3) {
Toast.makeText(this, ((Thing)view.getItemAtPosition(position)).getTitle(), 0).show(); } }

好了,自定义的listview的使用就到这里了,如果有疑问,请留言

【Android基础】listview控件的使用(4)-----自定义布局的listview的使用的更多相关文章

  1. 【Android基础】listview控件的使用(1)------最简单的listview的使用

    listview控件是项目开发中最常用的空间之一,我将慢慢推出关于listview的一系列的文章,先从最简单的,系统自带的listview开始吧! 先上效果图: activity_one.xml &l ...

  2. Android中ListView控件的使用

    Android中ListView控件的使用 ListView展示数据的原理 在Android中,其实ListView就相当于web中的jsp,Adapter是适配器,它就相当于web中的Servlet ...

  3. 【风马一族_Android】第4章Android常用基本控件

    第4章Android常用基本控件 控件是Android用户界面中的一个个组成元素,在介绍它们之前,读者必须了解所有控件的父类View(视图),它好比一个盛放控件的容器. 4.1View类概述 对于一个 ...

  4. ListView控件的Insert、Edit和Delete功能(第一部分)

    摘自:http://blog.ashchan.com/archive/2007/08/28/listview-control-insert-edit-amp-delete-part-1aspx/ Li ...

  5. C# ListView 控件和 INotifyPropertyChanged 接口

    ListView 控件和 DataGridView 控件 ListView 是跟 Winform 中 DataGridView 用法以及显示效果差不多的一个 WPF 控件,可以通过列表的方式方便的显示 ...

  6. ListView 控件和 INotifyPropertyChanged 接口

    原文:ListView 控件和 INotifyPropertyChanged 接口 ListView 控件和 DataGridView 控件 ListView 是跟 Winform 中 DataGri ...

  7. 【Android基础】listview控件的使用(3)------Map与SimpleAdapter组成的多显示条目的Listview

    前面介绍的两种listview的使用都是最基础的,所以有很大的局限性,比如只能在一个item(即每一行的条目)中显示一个文本信息,这一篇我将介绍Map与SimpleAdapter组成的多显示条目的Li ...

  8. 【Android基础】listview控件的使用(2)-------继承自ListActivity的普通listview

    由于listview在android控件中的重要性,所以android为我们直接封装了一个类ListviewActivity,直接将listview封装在了activity之中,在本篇中,我将介绍在L ...

  9. Android学习之基础知识五—ListView控件(最常用和最难用的控件)

    ListView控件允许用户通过上下滑动来将屏幕外的数据拉到屏幕内,把屏幕内的数据拉到屏幕外. 一.ListView的简单用法第一步:先创建一个ListViewTest项目,在activity_mia ...

随机推荐

  1. I2C分析三

    1 引言 IIC (Inter-Integrated Circuit1总线是一种由Philips公司开发的2线式串行总线,用于连接微控制器及其外围设备.它是同步通信的一种特殊形式,具有接口线少.控制方 ...

  2. SE 2014年5月22日

    一.   用自己的理解描述 tunnel接口状态 up和down的情况都有哪些 Tunnel接口的状态UP:隧道的目标有可达路由. Tunnel接口的状态Down:隧道的目标路由不可达. 如图配置实验 ...

  3. String的split

    对于  http://10.13.30.22/svn/SVNRepository/UnChecked/Test  想要分割他就要用: String subContent[]=modelInfo.get ...

  4. (转)一篇很不错的介绍Eclipse插件Menu及其扩展点的文章

    原文在:http://tech.ddvip.com/2010-04/1271054623150507.html 菜单是各种软件及开发平台会提供的必备功能,Eclipse 也不例外,提供了丰富的菜单,包 ...

  5. Redis的字典(dict)rehash过程源代码解析

    Redis的内存存储结构是个大的字典存储,也就是我们通常说的哈希表.Redis小到能够存储几万记录的CACHE,大到能够存储几千万甚至上亿的记录(看内存而定),这充分说明Redis作为缓冲的强大.Re ...

  6. bootstrap jQuery Ztree异步载入数据,check选择&amp;可加入、改动、删除节点

    效果图: 一.下载zTree插件 地址:http://www.ztree.me 二.html代码 <link href="../Scripts/zTree/css/zTreeStyle ...

  7. linux操作提示:“Can&#39;t open file for writing”或“operation not permitted”的解决的方法

    在linux上使用vi命令改动一个文件内容的时候,发现无法保存,每次写完使用":q!"命令能够正常退出可是使用":wq!"命令保存文件并退出时出现一下信息提示: ...

  8. Nginx将请求分发到各web应用

    介绍了VMWare12虚拟机.Linux(CentOS7)系统安装.部署Nginx1.6.3代理服务做负载均衡.接下来介绍通过Nginx将请求分发到各web应用处理服务. 一.Web应用开发 1.as ...

  9. JS 在 HTML 无缝滚动

    marquee图片无缝滚动先了解一下对象的几个的属性:innerHTML: 设置或获取位于对象起始和结束标签内的 HTMLscrollHeight: 获取对象的滚动高度.scrollLeft: 设置或 ...

  10. Ubuntu在下面LAMP(Linux+Apache+MySQL+PHP) 开发环境的搭建

    LAMP在行业是一个非常流行的词.此4字母代表Linux.Apache,MySQL和PHP. LAMP其高效.灵活的特点已经成为中小企业的首选. 它已经推出了快速构建LAMP道路. 1 在Ubuntu ...