引自:http://www.cnblogs.com/phonegap/archive/2011/04/28/2535732.html

在这里我就对自定义ListView进行讲解下吧,直入真题吧,首先我新创建一个项目:listDemo;

其次,我们需要建立一个XML文件,在这里我就直接写在main.xml里:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>

然后我们需要定义一个ITEM.XML来显示其数据:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:id="@+id/images_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon"
/>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<TextView
android:id="@+id/text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="default_001"
/>
<TextView
android:id="@+id/text_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="default_info"
/>
<TextView
android:id="@+id/text_url"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="default_url"
/> </LinearLayout>
</LinearLayout>

现在我们把XML文件做好了,就是对其适配数据的布局进行定义了,首先我们需要创建一个类:

package com.jsd;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.ListView; import com.jsd.adapter.AppAdapter;
import com.jsd.model.AppInfos; /**
* ListView customer
* @author jiangshide
*
*/
public class Demo extends Activity { private Context mContext;
private ListView listView;
private ArrayList<AppInfos> appInfos;
private AppAdapter appAdapter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getComponenets();
} /**
* componenet
*/
public void getComponenets(){
this.mContext = this;
listView = (ListView) findViewById(R.id.listView);
appInfos = new ArrayList<AppInfos>();
loadDatas();
appAdapter = new AppAdapter(mContext,appInfos);
listView.setAdapter(appAdapter);
} /**
* load datas
*/
public void loadDatas(){
for (int i = ; i < ; i++) {
AppInfos ai = new AppInfos();
if(i == ){
ai.setImages(R.drawable.icon);
}else if(i == ){
ai.setImages(R.drawable.item1);
}else if(i == ){
ai.setImages(R.drawable.item2);
}else if(i == ){
ai.setImages(R.drawable.item3);
}else if(i == ){
ai.setImages(R.drawable.item4);
}else if(i == ){
ai.setImages(R.drawable.item5);
}
ai.setText_id("");
ai.setText_infos("这是我们都需要注意的...");
ai.setText_url("http://jiangshide.com");
appInfos.add(ai);
}
}
}

这位主线程的UI类,

其实需要穿件一个适配器需要继承BaseAdapter:

package com.jsd.adapter;

import java.util.ArrayList;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter; import com.jsd.model.AppInfos;
import com.jsd.view.AppView; /**
* Adapter
* @author jiangshide
*
*/
public class AppAdapter extends BaseAdapter { private Context mContext;
private ArrayList<AppInfos> appInfos; public AppAdapter(Context c) {
this.mContext = c;
} public AppAdapter(Context c,ArrayList<AppInfos> appInfos) {
this.mContext = c;
this.appInfos = appInfos;
} public int getCount() {
return appInfos.size();
} public Object getItem(int position) {
return appInfos.get(position);
} public long getItemId(int position) {
return position;
} /**
* get view
*/
public View getView(int position, View convertView, ViewGroup parent) {
if(appInfos == null){
return null;
}
if(convertView == null){
AppView appView = new AppView(mContext);
appView.updateView(appInfos.get(position));
convertView = appView;
}else{
((AppView)convertView).updateView(appInfos.get(position));
}
return convertView;
} } 为了对其数据进行适配,我们需要对数据进行持久话:使用BEAN的方式进行保存 package com.jsd.model; /**
* datas
* @author jiangshide
*
*/
public class AppInfos { private int images;
private String text_id;
private String text_infos;
private String text_url; public int getImages() {
return images;
}
public void setImages(int images) {
this.images = images;
}
public String getText_id() {
return text_id;
}
public void setText_id(String textId) {
text_id = textId;
}
public String getText_infos() {
return text_infos;
}
public void setText_infos(String textInfos) {
text_infos = textInfos;
}
public String getText_url() {
return text_url;
}
public void setText_url(String textUrl) {
text_url = textUrl;
}
}

再次就是对View显示布局的控件进行定义来对数据参数的获取

package com.jsd.view;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView; import com.jsd.R;
import com.jsd.model.AppInfos; /**
* View
* @author jiangshide
*
*/
public class AppView extends LinearLayout { private Context mContext;
private ImageView image_id;
private TextView text_id,text_info,text_url; /**
*
* @param context
*/
public AppView(Context context) {
super(context);
this.mContext = context;
initilize(context);
} /**
*
* @param c
*/
public void initilize(Context c){
this.mContext = c;
View view = LayoutInflater.from(this.mContext).inflate(R.layout.item, null);
image_id = (ImageView) view.findViewById(R.id.images_id);
text_id = (TextView) view.findViewById(R.id.text_id);
text_info = (TextView) view.findViewById(R.id.text_info);
text_url = (TextView) view.findViewById(R.id.text_url);
addView(view);
} /**
*
* @param ai
*/
public void updateView(AppInfos ai){
image_id.setImageResource(ai.getImages());
text_id.setText(ai.getText_id());
text_info.setText(ai.getText_infos());
text_url.setText(ai.getText_url());
}
}

OK,以上就是完整的代码实现对ListView的自定义的实现,

Android------自定义ListView详解的更多相关文章

  1. Android 自定义 View 详解

    View 的绘制系列文章: Android View 绘制流程之 DecorView 与 ViewRootImpl Android View 的绘制流程之 Measure 过程详解 (一) Andro ...

  2. 淘宝(阿里百川)手机客户端开发日记第四篇 自定义ListView详解

    我们知道,如果采用官方的ListView,实现的功能在很多时候,并不能满足自己的业务需求,比如在设计到复杂的列表的时候,这一节,我们就开始动手自己实现自定义的ListView. 在上一节中,我们采用了 ...

  3. Android中 ListView 详解(二)

    本文版权归 csdn noTice501 所有,转载请详细标明原作者及出处,以示尊重! 作者:noTice501 原文:http://blog.csdn.net/notice520/article/d ...

  4. Android的ListView详解

    在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示.抽空把对ListView的使用做了整理,并写了个小例子,如下图. 列表的显示需要三 ...

  5. android 自定义view详解

    1.自定义View前首先要了解一下View的方法,虽然有些不一定要实现. 分类 方法 描述 创建 Constructors View中有两种类型的构造方法,一种是在代码中构建View,另一种是填充布局 ...

  6. Android之canvas详解

    首先说一下canvas类: Class Overview The Canvas class holds the "draw" calls. To draw something, y ...

  7. 【转】Android Canvas绘图详解(图文)

    转自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html Android Canvas绘图详解(图文) 泡 ...

  8. android屏幕适配详解

    android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 一.关于布局适配建议 1.不要 ...

  9. Android Studio 插件开发详解三:翻译插件实战

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78113868 本文出自[赵彦军的博客] 一:概述 如果不了解插件开发基础的同学可以 ...

  10. Android Studio 插件开发详解一:入门练手

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78112003 本文出自[赵彦军的博客] 一:概述 相信大家在使用Android S ...

随机推荐

  1. ios隐藏键盘的方式简单应用

    iOS开发中经常要用到输入框,默认情况下点击输入框就会弹出键盘,但是必须要实现输入框return的委托方法才能取消键盘的显示,对于用户体验来说很不友好,我们可以实现点击键盘以外的空白区域来将键盘隐藏, ...

  2. sqlDeveloper连接oracle

    1.解决oracle11g的ORA-12505问题 启动oraclehome92TNSlistener服务,启动oracleserviceXXXX,XXXX就是你的database SID. < ...

  3. 如何利用Visual studio 2010创建一个ASP网站?

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="UserLogin.aspx.c ...

  4. hdu_4718_The LCIS on the Tree(树链剖分+线段树合并)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4718 题意:给你一棵树,每个节点有一个值,然后任给树上的两点,问这两点的最长连续递增区间是多少 题解: ...

  5. python--sorted函数

    摘自:http://www.cnblogs.com/65702708/archive/2010/09/14/1826362.html 我们需要对List进行排序,Python提供了两个方法对给定的Li ...

  6. servlet第2讲(上集)

  7. 在Windows上安装Python

    首先,从官网下载 最新版本 的Python 2.7.可通过 Python官网 的”Windows Installer”链接保证下载到的版本是最新的. Windows版本是MSI文件格式,双击它即可开始 ...

  8. PHP xdebug的安装

    xdebug实际上就是PHP的一个第三方扩展 安装xdebug步骤和添加一个PHP扩展一样 linux:去xdebug官网下载对应版本的源码,然后像编译其他linux扩展一样,详解我的一篇关于Linu ...

  9. abstract class 和 interface区别

    相同点: 1.都不能被直接实例化,都可以通过继承实现其抽象方法: 不同点: 1.接口支持多继承,抽象类只能由一个父类: 2.接口只能定义行为,抽象类既可以定义行为,又可以提供实现: 3.接口只包含方法 ...

  10. java动态代理(1)

    来源:http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html# java动态代理(JDK和cglib) JAVA的动态代理 代理模式 代 ...