您的位置:首页 > 其它

ListView的归纳与总结

2016-07-01 23:46 211 查看
ListView,是每一个android程序员都应该和必须掌握的,也是使用频率最高的,不废话,直接正题...

常用adapter适配器:

1.ArrayAdapter(context,布局文件,控件ID,以维数组名) :只能实现内容单一的下滑显示

2.SimpleAdapter(context,集合,布局文件,String [ ] 建,int [ ] 控件id):显示的数据是多条键值对

                     例:List<Map<String,Object>>list=new HashMap<Map<String,Object>>();

            d                           创建每一个MAP对象,添加进list集合

                                       map的键不会显示在屏幕上,值做选定数据用

3.BaseAdapter:使用频率最高的,直接添加类中的数据

  回调:  getCount()//设置总条目数据

                getItem(int position)//返回条目对象

                 getItemId(int  position)//返回条目对应ID

                 getView(int position,View converView,ViewGroup parent) //将条目转换成view对象,找条目对应的组件,设置每个条目数据

                     

常用属性:

divider:在listView控件中添加分隔线,可以是图片或颜色线条

dividerHeight:分割线高度

listSelector:点击单个item时的显示效果,图片或颜色

ListView代码中

Adapter.notify():刷新当前ListView的数据

遍历ListView

ListView.getChildCount():获得当前ListView的所有Item

View view=ListView.getChildAt(int):返回一个View类型的item

优化adapter:

据说,经测试,利用ViewHolder将有效提高50%以上的效率

public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
//判断是否是缓存
if (convertView == null) {
holder = new ViewHolder();
convertView = View.inflate(context, R.layout.my_item, null);
//将控件用holder的属性,利用convertView的tag存起来
holder.tv = (TextView) convertView.findViewById(R.id.item_tv);
convertView.setTag(holder);

} else {
//通过tag找到缓存的控件
holder = (ViewHolder) convertView.getTag();
}
//设置要显示内容
holder.tv.setText(data.get(position).getName());

return convertView;
}

//缓存类,存放控件属性,一般都用ViewHolder命名
class ViewHolder {
TextView tv;
}


监听

OnTouchListener:监听DOWN,MOVE,UP事件发生时的坐标

 
listview.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//触摸时
break;
case MotionEvent.ACTION_MOVE:
//移动时
break;
case MotionEvent.ACTION_UP:
//离开时
break;
}

return false;
}
});


OnScrollListener:在ListView滚动时,一直回调,三个参数精准的显示当前ListView状态

 
listview.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case NumberPicker.OnScrollListener.SCROLL_STATE_IDLE:
//滑动停止时
break;
case NumberPicker.OnScrollListener
a103
.SCROLL_STATE_FLING:
//手指抛动时,ListView惯性滑动时
break;
case NumberPicker.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
//正在滚动
break;

}
}

@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
//firstVisibleItem:当前能看见的第一个item的ID(从0开始)
//visibleItemCount:当前能看见的item总数
//totalItemCount:整个ListView的item总数
//Toast.makeText(MainActivity.this,""+visibleItemCount,Toast.LENGTH_LONG).show();
Log.e("TAG",listview.getLastVisiblePosition()+"");//获取区域内最后一个item的id
Log.e("TAG",listview.getFirstVisiblePosition()+"");//获取区域内第一个item的id
}
});


onItemClick:条目点击事件,需要注意的是,当item是自定义VIEW和item设置了onTochEvent时

有可能会导致listener无法被调用,解决办法:

 1.对ListView的根控件设置android:descendantFocusability="blocksDescendants"

 2.自定义监听
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this,""+data.get(position).getName(),Toast.LENGTH_LONG).show();
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: