上一篇《android listview初步学习实例代码》分享了一个listview初级实例,本文我们看看一个进阶实例。
目录结构:

MainActivity2
package com.example1.listviewpracticvce;/*  * 本activity实现的功能:  * 将数据库中的数据用listview显示出来  */import com.example1.listviewdao.PersonDAO;import android.app.Activity;import android.content.Context;import android.database.Cursor;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ImageView;import android.widget.ListView;import android.widget.SimpleCursorAdapter;import android.widget.TextView;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;import android.widget.SimpleCursorAdapter.ViewBinder;public class MainActivity2 extends Activity {	ListView lvPerson;	@Override 	    protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.person);		PersonDAO personDAO = new PersonDAO(this);		Cursor cursor = personDAO.getPersons();		//cursor类似一个指针 		lvPerson = (ListView) findViewById(R.id.lvPerson);		//SimpleCursorAdapter(context, layout,   c,   from,    to    ) 		//            listview的布局    cursor 需要显示的列  在哪个控件中显示 		//数组开头的列必须是"_id" 		SimpleCursorAdapter adapter = new PersonAdapter(this, R.layout.person_item, cursor, 		          new String[]{ "_id", "pname", "pgender" }, 		          new int[]{ R.id.tvPid, R.id.tvPname, R.id.ivPgender });		//     SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.person_item, cursor,  		//     new String[]{ "_id", "pname", "pgender" }, //要显示的列 		//     new int[]{ R.id.tvPid, R.id.tvPname, R.id.ivPgender });//显示每行所用控件 		//为了将性别显示为图片,这里复写了SimpleCursorAdapter这个类 		lvPerson.setAdapter(adapter);		lvPerson.setOnItemClickListener(new OnItemClickListener() 		      {			@Override 			        public void onItemClick(AdapterView<?> parent, View view, int position, long id) 			        {				Cursor cursor = (Cursor) parent.getItemAtPosition(position);				Toast.makeText(getApplicationContext(), cursor.getString(1), Toast.LENGTH_sHORT).show();			}		}		);	}}//利用源代码定制 class PersonAdapter extends SimpleCursorAdapter   {	private Cursor mCursor;	protected int[] mFrom;	protected int[] mTo;	private ViewBinder mViewBinder;	public PersonAdapter(Context context, int layout, Cursor c, String[] from, int[] to) 	    {		super(context, layout, c, from, to);		mCursor = c;		mTo = to;		findColumns(from);	}	@Override 	    public void bindView(View view, Context context, Cursor cursor) 	    {		final ViewBinder binder = mViewBinder;		final int count = mTo.length;		final int[] from = mFrom;		final int[] to = mTo;		for (int i = 0; i < count; i++) 		      {			final View v = view.findViewById(to[i]);			if (v != null) 			        {				Boolean bound = false;				if (binder != null) 				          {					bound = binder.setViewValue(v, cursor, from[i]);				}				if (!bound) 				          {					String text = cursor.getString(from[i]);					if (text == null) 					            {						text = "";					}					if (v instanceof TextView) 					            {						setViewText((TextView) v, text);					} else if (v instanceof ImageView) 					            {						if (text.equals("男")) 						              {							setViewImage((ImageView) v, String.valueOf(R.drawable.boy));						} else 						              {							setViewImage((ImageView) v, String.valueOf(R.drawable.girl));						}					} else 					            {						throw new IllegalStateException(v.getClass().getName() + " is not a " + " view that can be bounds by this SimpleCursorAdapter");					}				}			}		}	}	private void findColumns(String[] from) 	    {		if (mCursor != null) 		      {			int i;			int count = from.length;			if (mFrom == null || mFrom.length != count) 			        {				mFrom = new int[count];			}			for (i = 0; i < count; i++) 			        {				mFrom[i] = mCursor.getColumnIndexOrThrow(from[i]);			}		} else 		      {			mFrom = null;		}	}}DBOpenHelper
package com.example1.listviewdao;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class DBOpenHelper extends SQLiteOpenHelper {	private static final int VERSION = 1;	private static final String DBNAME = "data.db";	private static final String PERSON="t_person";	public DBOpenHelper(Context context) 	  {		super(context, DBNAME, null, VERSION);	}	@Override 	  public void onCreate(SQLiteDatabase db) 	  {		db.execSQL("create table "+PERSON+" (_id varchar(4) primary key,pname varchar(20),pgender varchar(2))");		db.execSQL("insert into t_person (_id, pname, pgender) values ('1001','张三','男')");		db.execSQL("insert into t_person (_id, pname, pgender) values ('1002','李四','男')");		db.execSQL("insert into t_person (_id, pname, pgender) values ('1003','王五','女')");		db.execSQL("insert into t_person (_id, pname, pgender) values ('1004','赵钱','男')");		db.execSQL("insert into t_person (_id, pname, pgender) values ('1005','孙李','女')");		db.execSQL("insert into t_person (_id, pname, pgender) values ('1006','周吴','男')");		db.execSQL("insert into t_person (_id, pname, pgender) values ('1007','郑王','男')");		db.execSQL("insert into t_person (_id, pname, pgender) values ('1008','冯陈','男')");		db.execSQL("insert into t_person (_id, pname, pgender) values ('1009','褚卫','女')");		db.execSQL("insert into t_person (_id, pname, pgender) values ('1010','蒋沈','男')");		db.execSQL("insert into t_person (_id, pname, pgender) values ('1011','韩杨','男')");		db.execSQL("insert into t_person (_id, pname, pgender) values ('1012','朱秦','男')");		db.execSQL("insert into t_person (_id, pname, pgender) values ('1013','尤许','男')");	}	@Override 	  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 	  {	}}Person
package com.example1.listviewdao;public class Person {	private String pid;	private String pname;	private String pgender;	public Person() 	  {		super();	}	public Person(String pid, String pname, String pgender) 	  {		super();		this.pid = pid;		this.pname = pname;		this.pgender = pgender;	}	public String getPid() 	  {		return pid;	}	public void setPid(String pid) 	  {		this.pid = pid;	}	public String getPname() 	  {		return pname;	}	public void setPname(String pname) 	  {		this.pname = pname;	}	public String getPgender() 	  {		return pgender;	}	public void setPgender(String pgender) 	  {		this.pgender = pgender;	}	@Override 	  public String toString() 	  {		return "pid=" + pid + ";pname=" + pname + ";pgender=" + pgender;	}}PersonDAO
package com.example1.listviewdao;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;public class PersonDAO {	private DBOpenHelper helper;	private SQLiteDatabase db;	public PersonDAO(Context context) 	  {		helper = new DBOpenHelper(context);	}	public Cursor getPersons(int start, int count) 	  {		db = helper.getWritableDatabase();		Cursor cursor=db.query("t_person", new String[]{"_id","pname","pgender"}, null, null, null, null, "_id desc",start+","+count);		return cursor;	}	public Cursor getPersons() 	  {		db = helper.getWritableDatabase();		Cursor cursor=db.query("t_person", new String[]{"_id,pname,pgender"}, null, null, null, null, null);		return cursor;	}	public long getCount() 	  {		db = helper.getWritableDatabase();		Cursor cursor = db.rawQuery("select count(_id) from t_person", null);		if (cursor.moveToNext()) 		    {			return cursor.getlong(0);		}		return 0;	}}person_item.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/tvPid" android:layout_width="70dp" android:layout_height="50dp" android:gravity="center" android:textSize="15sp" /> <TextView android:id="@+id/tvPname" android:layout_width="190dp" android:layout_height="50dp" android:gravity="center" android:textSize="15sp" /> <ImageView android:id="@+id/ivPgender" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- <TextView android:id="@+id/ivPgender" android:layout_width="wrap_content" android:layout_height="50dp" android:gravity="center" android:textSize="15sp" /> --> </LinearLayout>
person.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" > <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:layout_width="70dp" android:layout_height="wrap_content" android:gravity="center" android:text="编号" android:textSize="20sp" android:textStyle="bold" /> <TextView android:layout_width="190dp" android:layout_height="wrap_content" android:gravity="center" android:text="姓名" android:textSize="20sp" android:textStyle="bold" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="性别" android:textSize="20sp" android:textStyle="bold" /> </LinearLayout> <ListView android:id="@+id/lvPerson" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/bg" android:scrollingCache="false" android:divider="@drawable/line" /> </LinearLayout>
结果展示

总结
以上就是本文关于android listview进阶实例分享的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
新闻热点
疑难解答