前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android listview进阶实例分享

android listview进阶实例分享

作者头像
砸漏
发布2020-10-31 16:38:54
3730
发布2020-10-31 16:38:54
举报
文章被收录于专栏:恩蓝脚本

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

目录结构:

MainActivity2

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
<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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档