ListView的归纳与总结

来源:互联网 发布:网络直播音效辅助工具 编辑:程序博客网 时间:2024/04/29 07:16

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.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();            }        });



0 0