在很多时候系统的listview很难满足我们的需要,因为布局比较复杂,所以这时候肯定需要一个布局文件来满足自己需要。这个东西相信大家在网上能搜索一大摞的资料,只是可能感觉不是很适合小白看吧,毕竟有很多大神想追求更加有技术性的东西,我其实想把这些东西简单化,没别的意思。

下面我贴出效果图吧,毕竟是简单化的,没有太多的渲染和繁华。

android listview 自定义表项 listview自定义布局_List

下面我贴出工程结构图

android listview 自定义表项 listview自定义布局_List_02

好了,下面我会一步步详细的介绍如何做listview自定义布局

一、我们需要在layout文件夹下建立一个myapadter.xml布局文件,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="40dp"
        android:layout_marginTop="48dp"
        android:text="TextView" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView1"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="20dp"
        android:text="不变数据" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/textView2"
        android:layout_below="@+id/textView2"
        android:text="不变数据" />

</RelativeLayout>

二、建立一个Apadter,这个类需要继承BaseApadter。注意里面的getView()方法,getView()返回的是view,这个view就是listview里面的item,所以getview()本身就是一个循环,不需要在里面写循环了。代码注释的比较全面,我就不解释了

package com.yuriko.mybaseapater;

import java.util.List;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class Apadter1 extends BaseAdapter {
	private Context context;
	//数据源
	private List<String> lv;
	private TextView textview1;
	@Override
	public int getCount() {
		// 返回lv的长度
		return lv.size();
	}

	@Override
	public Object getItem(int arg0) {
		// 返回lv的第几个item,其实如果你里面放的是对象,返回的也就是第几个对象
		return lv.get(arg0);
	}

	@Override
	public long getItemId(int arg0) {
		// 返回item的id,也就是为了在写listview的点击事件时方便使用
		return arg0;
	}

	@Override
	public View getView(int arg0, View arg1, ViewGroup arg2) {
		//判断arg1是否为空,如果为空就建一个view
		//R.layout.myapadter就是listview里面的item,也就是apadter
		if(arg1==null){
			arg1=View.inflate(context, R.layout.myapadter, null);
		}
		//绑定控件
		textview1=(TextView)arg1.findViewById(R.id.textView1);
		//绑定数据
		textview1.setText(lv.get(arg0));
		return arg1;
	}
	//构造方法
	public Apadter1(Context context, List<String> lv) {
		super();
		this.context = context;
		this.lv = lv;
	}

}

三、MainActivity,里面基本上没有什么问题,注释的比较全面

package com.yuriko.mybaseapater;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

public class MainActivity extends Activity {
	private ListView listview1;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		listview1=(ListView)findViewById(R.id.listView1);
		//加载Apadter
		listview1.setAdapter(new Apadter1(this,data()));
		listview1.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				// arg2其实就是第N+1个item
				//可能大家就是说会希望每个item触发不同事件,这个就可以做到,但是仅仅限于少量的item,多的话不好用
					if(arg2==0){
						
					}else if(arg2==1){
						
					}else{
						
					}
			}
		});
	}
	//数据源
	private List<String> data(){
		//存储数据,里面的类型是String,当然喜欢的话可以选择使用类,用来存储对象
		List<String> data=new ArrayList<String>();
		//循环添加十个数据
		for(int i=0;i<10;i++){
			String s="第"+i+"个数据";
			//添加数据
			data.add(s);
		}
		return data;
	}

}



四、主界面

<RelativeLayout 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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" >
    </ListView>

</RelativeLayout>



这样就可以完成了,代码完全可以复制进去即可做到。