引自: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. js cookie 记住用户名密码

    function saveUserInfo(){ if($("#remember").attr('checked')=="checked"){ var user ...

  2. VBS调用keybd_event事件

    ----------------发送alt+v组合按键----------------------Set Wrap = CreateObject("DynamicWrapper") ...

  3. linux服务器出现严重故障后的原因以及解决方法

    1.把系统安装光盘插入,重启机器,启动时迅速按下Del键,进入CMOS,把启动顺序改为光盘先启动,这样就启动了Linux安装程序,按F5,按提示打入Linux rescue回车,进入救援模式,接下来是 ...

  4. Git 开发新的功能分支

    软件开发中,总有无穷无尽的新的功能要不断的添加进来.添加一个新功能时,你肯定不希望因为一些实验性质的代码把主分支搞乱了, 所以每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并 ...

  5. Linux基础命令---压缩与打包

    GZIP: 普通文件打包成gzip文件:gzip filename(问题:如何测试一个文件是否是gzip文件?) gzip文件解压成普通文件:gzip -d filename(副作用:原始gz文件会被 ...

  6. Android Service学习之IntentService 深入分析

          什么是IntentService? (本文转自http://blog.csdn.net/gaojie314/archive/2010/11/28/6040701.aspx) 官方的解释是: ...

  7. SQL 查询时间段内的时间

    declare @dt1 as datetime declare @dt2 as datetime set @dt1 = '2008-01-01' set @dt2 = '2009-01-01' ;w ...

  8. centos gdb安装

    1. 下载gdb 7.6.1源码包 http://ftp.gnu.org/gnu/gdb/gdb-7.6.1.tar.gz 将源码包放在home目录的Download目录中 2. 解压缩gdb 7.6 ...

  9. Objective-C语法之NSMutableString字符串的那些事儿

     Objective-C语法之字符串那些事         NSMutableString 类 继承NSString类,那么NSString 提供的方法在NSMutableString中基本都可以使用 ...

  10. js的各种错误类型

    1.SyntaxError(语法错误) 解析代码时发生的语法错误 eg:var 1a; Uncaught SyntaxError: Unexpected number 2.ReferenceError ...