引自: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. webstrom官方的活动模版介绍

    编辑模板变量对话框 文件|设置|生活模板--编辑变量Windows和LinuxWebStorm |偏好|生活模板--编辑变量在OS XCtrl + Alt + S 当你点击对话框打开 编辑变量按钮模板 ...

  2. Kmeans聚类算法

    K-means也是聚类算法中最简单的一种了,但是里面包含的思想却是不一般.最早我使用并实现这个算法是在学习韩爷爷那本数据挖掘的书中,那本书比较注重应用.看了Andrew Ng的这个讲义后才有些明白K- ...

  3. hdu_5274_Dylans loves tree(树剖)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5274 题意:给一棵树和叶子的值,然后有单点修改操作和询问区间操作,询问的是每一个值出现的奇偶次数,如果 ...

  4. ice调通过iceReplica用所有server instance的方法---客户端控制服务端的负载均衡

    I 使用此方法,可以增量的通知Ice服务配置的改变,刷新每个服务进程的数据 可以手动控制客户端调用的负载均衡,客户端程序决定将请求发往那个进程 上代码: import logging import I ...

  5. 去掉uitableveiw多余的分割线

    UIView *v = [[UIView alloc] initWithFrame:CGRectZero]; [_tableView setTableFooterView:v];

  6. JS调用OC方法

    - (void)myMethod:(CDVInvokedUrlCommand*)command { NSString* echo = [command.arguments objectAtIndex: ...

  7. perl的Getopt::Long和pod::usage ?

    来源: http://www.cnblogs.com/itech/archive/2012/08/07/2627267.html 代码: 需要显式地定义变量且初始化.例如optionX. 如果没有定义 ...

  8. openCV(一)---将openCV框架导入iOS工程中

    开发环境: Xcode 6.4   openCV for iOS 3.0    配置openCV开发环境 在OpenCV官网中下载OpenCV开发包(官网地址:http://opencv.org/) ...

  9. Notification使用笔记

    之前在项目中使用了Notification,现分享出来: checkNotification() function checkNotification(){ //判断是否支持Notification ...

  10. gSoap工具wsdl2h及soapcpp2指令汇总

    gSoap开发包的下载地址http://sourceforge.net/projects/gsoap2,在bin目录下提供了两个工具: 1:wsdl2h:The gSOAP wsdl2h tool i ...