当前位置:首页 > 安卓-Junit-文件存储-XML解析方式-数据库-ListView-内容提供者-观察者
? ?
当点击ListView中的某个item项时,会自动调用getItem( )方法,这时我们可以通过persons.get(position)方法来返回一个Person对象。 getItemId( )一般就返回posion即可,即返回ListView中item项的索引
具体代码在10.SQLite项目中的:
res/layout/main.xml res/layout/item.xml
com.itheima.sqlite包:MainActivityByBaseAdapter
方式二:SimpleAdpter
new SimpleAdapter(Context context, List extends Map
? ? ? 把persons里的每个Person对象里的属性封装成一个Map,即map.put(“name”,person.getName)的形式转换,一个Person变成一个Map然后把所有的Map存到一个List中,这个List就是上面所需要的data参数。 Resource为item.xml的引用(即R.layout.item),from,为Map里的各个key的值
to指定要resource参数中对应key的值保存到对应的R.id.tv_name中,to是一个数组,就是用来指定所有的R.id… 具体代码在10.SQLite
项目中的:com.itheima.sqlite包:MainActivityBySimpleAdapter
方式三:SimpleCursorAdpter
new SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to) ?
这里所需要的参数跟方式二中的类似,Cursor是一个保存了所有Person记录集的对象,也就是说相当于一条记录就是一个Person对象,在这条记录里有name、id、balance等字段。from就是Cursor对象里记录中的字段名
注意:这里要求的Cursor对象必须要有一个名为“ _id ”的字段,要不然就会报错。注意,只是说这个Cursor对象的记录中必须要有而已,并没有说数据库中一定要有这个“_id”字段,因为在执行查询语句时可以给id起一个别名为“_id”,但是在SQLite中有一个不成名的规定:数据库中的id字段一般名为“_id”,所以最好把数据库里的id直接起名为“_id”。 layout是一个item.xml文件的引用:R.layout.item 具体代码在10.SQLite
?
项目中的:com.itheima.sqlite包:MainActivityBySimpleCursorAdapter
总结:
? ?
用第三种方式最方便,因为从数据库里查询数据调用SQLite的rawQuery( )或query( )方法返回的就是一个Cursor。 如果数据不是从数据库查询来的,用第二种方式会比较方便一些。
往ListView中的item项增加监听器
增加监听器: ListView. setOnItemClickListener(OnItemClickListener listener)
这里需要一个OnItemClickListener接口的子类
如果使用的是SimpleCursorAdpter:
private class MyOnItemClickListener implements OnItemClickListener { public void onItemClick(AdapterView> parent, View view, int position, long id) {
Cursor c = (Cursor) parent.getItemAtPosition(position); // 得到选中的条目上的Cursor, 这个Cursor已经被移动到选中的位置了
Person p = new Person(c.getInt(0), c.getString(1), c.getInt(2)); // 获取Cursor中的数据, 组装成对象 Toast.makeText(getApplicationContext(), p.toString(), 0).show(); // 弹出
} }
在代码中选择AdapterView然后按Ctrl+T可以查看AdapterView的类继承结果,可以看到的父类是View,它还有一个子类ListView,其实这个prarent参数就是Item项的容器,即ListView对象。
因为SimpleCursorAdpter生成的item项是通过Cursor对象生成的,所以parent.getItemAtPosition(position)返回的当然也就是一个Cursor对象。 而view即所点的LinearLayout(Item项) position为所点击的是第几个
id 一般这个值和position是一样的
具体代码在10.SQLite
项目中的:com.itheima.sqlite包:MainActivityBySimpleCursorAdapter
如果使用的是SimpleAdpter:
private class MyOnItemClickListener implements OnItemClickListener { public void onItemClick(AdapterView> parent, View view, int position, long id) { Map
Toast.makeText(getApplicationContext(), p.getName(), 0).show(); // 弹出
} }
因为SimpleAdpter生成的item项是通过Map对象生成的,所以parent.getItemAtPosition(position)返回的当然也就是一个Map对象。 具体代码在10.SQLite
项目中的:com.itheima.sqlite包:MainActivityBySimpleAdapter
如果使用的是BaseAdpter:
private class MyOnItemClickListener implements OnItemClickListener { public void onItemClick(AdapterView> parent, View view, int position, long id) { Person p = (Person) parent.getItemAtPosition(position); // 得到选中的条目上的Person Toast.makeText(getApplicationContext(), p.toString(), 0).show(); // 弹出
} }
parent.getItemAtPosition(position)的返回值是什么呢?Adpter接口中的getItem( )方法返回的对象,因为之前写的时候返回的是Person所以这里的返回值就是Person,其实使用SimpleAdpter时,内部的getItem()方法返回的就是Map,而使用SimpleCursorAdpter是getItem()返回的是Cursor对象。 具体代码在10.SQLite
项目中的:com.itheima.sqlite包:MainActivityByBaseAdapter
ArrayAdapater
ListView.setAdapter(new ArrayAdapter
共分享92篇相关文档