欢迎来到代码驿站!

Android代码

当前位置:首页 > 移动开发 > Android代码

android listview进阶实例分享

时间:2020-12-05 12:41:13|栏目:Android代码|点击:

上一篇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进阶实例分享的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

上一篇:Android Studio 3.0后出现AAPT2与“android.enableAapt2”问题的解决方法

栏    目:Android代码

下一篇:Android手机通过蓝牙连接佳博打印机的实例代码

本文标题:android listview进阶实例分享

本文地址:http://www.codeinn.net/misctech/29683.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有