这张文章主要针对老道(csdn官方群)兄弟说上一博客SQLite的具体使用没写的很明白做补充。。非常感谢来捧场。你是第一个
在这之前我犯了一个非常低级的错误。ListView 里面是不能添加控件的。只能后台引用其他的UI。希望新学的兄弟别犯同样的错误。
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/lvSource"
android:layout_width="match_parent"
android:layout_height="313dp"
android:layout_x="0dp"
android:layout_y="0dp" />
</AbsoluteLayout>
这是ListView_Demo.xml 代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:orientation="horizontal"
android:layout_height="match_parent" >
<TextView
android:id="@+id/Uname"
android:layout_width="200dp"
android:layout_height="match_parent"
/>
<TextView
android:id="@+id/Upwd"
android:layout_width="200dp"
android:layout_height="match_parent"
/>
</LinearLayout>
这是ListViewItem 的代码。。主要显示 listView 一行里有 一个name一个pwd 字段数据,下面主要讲解后台代码
private ListView list;
private SqlLiteCreateDateBase sqlCreate;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.listview_demo);
Log.e("ListView演示", "初始化成功。。。");
list=(ListView)this.findViewById(R.id.lvSource);
sqlCreate=new SqlLiteCreateDateBase(this) {
};
try {
Cursor c=sqlCreate.getReadableDatabase().rawQuery("select username,userpwd from userinfo",null);
Log.e("ListView演示", "获取数据成功");
List<Map<String, Object>> listSource=this.GetSource(c);
SimpleAdapter sa=new SimpleAdapter(this,listSource, R.layout.listviewitem,
new String[]{"userName","userPwd"}, new int[]{R.id.Uname,R.id.Upwd});
list.setAdapter(sa);
} catch (Exception e) {
new AlertDialog.Builder(null)
.setTitle("标题")
.setMessage("消息:"+e.getMessage())
.setPositiveButton("确认", null)
.show();
}
其实代码很简单 大家一看都明白 。最主要的就是封装解析Cursor 我把数据封装到List<Map<String, Object>> 对象里面 便于Adapter于ListView。这代码最主要的是讲解下SimpleAdapter ;android.widget.SimpleAdapter.SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) 大家看下这个类。第二个参数主要是传数据集合,第三个参数主要穿 listView行对象。注意这个 一般情况都是一个单独的UI。千万别写到ListView里面。第四个是字段名。第五个是绑定UI上控件的名字。下面我贴出如何解析Cursor数据。
public List<Map<String, Object>> GetSource(Cursor cursor)
{
List<Map<String, Object>> list=new ArrayList<Map<String, Object>>();
Map<String, Object> m=null;
// while(cursor.moveToNext())
// {
for(cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext())
{
m=new HashMap<String, Object>();
m.put("userName","账号:"+ cursor.getString(cursor.getColumnIndex("userName")));
m.put("userPwd","密码:"+cursor.getString(cursor.getColumnIndex("userPwd")));
list.add(m);
}
Log.e("ListView演示", "数据解析成功");
Log.e("数据行数:", cursor.getCount()+"行");
return list;
}
Cursor主要有几个经常用的函数:moveToFirst(),moveToLast(),moveToNext(),moveToPosition(int position),moveToPrevious() 看字面意思大家估计也看的出来。第一个是表示光标移到第一行。最后一行、下一行、绝对定位某一行、上一行。等 具体的可去查看它的用法。都很简单。
使用 Android Cursor 的时候你必须先知道关于 Cursor 的几件事情:
使用 moveToFirst() 定位第一行。
你必须知道每一列的名称。
你必须知道每一列的数据类型。
Cursor 是一个随机的数据源。
所有的数据都是通过下标取得。
好了今天的ListView就讲解这些。。其实我学android主要是做产品的。主要是和硬件打交道串口通信之类的。可能是扫描条码。二维码 之类的设备。可能后期的博客会侧重于这方面。谢谢大家的关注。你的关注就是我的动力。。