2015/04/01 星期三
计划:
- 1. 改变List的存储结构(数据库或者其他),读取方式。
- 2. 添加编辑功能(增删改)。
- 3. 按钮/开关的状态信息保存。
- 全开全关按钮的边界。
完成:
- 之所以页面在上下滑动时开关的状态会自己改变,是因为在生成页面,显示开关状态时,没有按照各个开关在数据库中的位置来显示其状态,而只是在生成某一行是读取当前holder的值。
问题原因:主要问题在于根据状态来改变按钮的显示,但因为listview的item具有复用机制,可能会出现按钮状态连锁改变、按钮状态紊乱等不定情况,解决办法是记住对应索引的按钮状态存入集合,在getview中读取,显示,触发事件的时候再更改集合,重新赋值。
protected void onListItemClick(ListView l, View v, int position, long id)
声明,我看文档了,文档说:
onListItemClick:当list里的一个item被点击的时候调用
l
这个点击事件在哪个ListView发生的
v
哪个View被点击了
position
这个View在ListView中的位置
id
这个被点击的View的ID
position 在listview是的位置,可以理解为数组的下标。id是子view的资源id,在整个应用中是唯一的。 |
position是用来被Cursor定位的,id是被SQLiteOpenHelper增删改查用的。
id是数据库相关的变量,Cursor查询数据库时有用
参考资料:
BaseAdapter——convertView回收机制与动态控件响应
SlideExpandableListView-master
Android
ListView和Adapter(二) 继承BaseAdapter实现一个列表功能:
在处理ListView的条目点击事件的时候,ListView的父类AdapterView会有一个方法getItemAtPosition 这个方法会调用Adapter中的getItem(int postion)方法
开启这个状态开关需要写在OnItemClickListener(), 再里面通过getAdapter获取BaseAdapter实例,然后通过其中的notifyDataSetInvalidated()刷新数据就好了。