android学习笔记(23)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>







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值