1、listView的xml
2、listVIew的每各Item的布局xml
3、创建一个adapter继承BaseAdapter
4、将数据绑定到视图
adapter的代码样例:
public class MyAdapter extends BaseAdapter{
private LayoutInflater mInflater;
private List<Map<String,Object>> list;
public MyAdapter(Context context , List<Map<String,Object>> list){
this.mInflater = LayoutInflater.from(context);
this.list = list;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.list_item, null);
holder.name = (TextView)convertView.findViewById(R.id.tv1);
holder.age = (TextView)convertView.findViewById(R.id.tv2);
holder.pic = (ImageView)convertView.findViewById(R.id.iv1);
convertView.setTag(holder);
}else{
holder = (ViewHolder)convertView.getTag();
}
holder.name.setText((String)list.get(position).get("name"));
holder.age.setText((String)list.get(position).get("age"));
holder.pic.setBackgroundResource((Integer)list.get(position).get("pic"));
return convertView;
}
public final class ViewHolder{
public TextView name;
public TextView age;
public ImageView pic;
}
}
5、在activiity里面如何调用listVIew
//引用listVIew
listview = (ListView)findViewById(R.id.mylistview);
//创建adapter,传值
MyAdapter myAdapter = new MyAdapter(this,putData());
//适配
listview.setAdapter(myAdapter);
listView和spinner的监听区别:
ListView的监听器与Spinner的监听器的区别:
Spinner是:setOnItemSelectedListener
ListView是:setOnItemClickListener
这两个监听器是否可以互换使用呢?
在Spinner中使用OnItemClickListener会异常。java.lang.RuntimeException: setOnItemClickListener cannot be used with a spinner。而如果在ListView中使用OnItemSelectedListener,则没有反应,也就是说该监听器不会被触发执行;
OnItemSelectedListener 监听器的回调方法中,parent.getSelectedItem()和parent.getItemAtPosition(position)都能返回object对象。而OnItemClickListener监听器的回调方法中parent.getSelectedItem()只能返回null。
以下是ListView的一些设置:设置项目分割线:
android:divider="@android:color/darker_gray"
android:dividerHeight="10dp"
隐藏ListView的滚动条;
android:scrollbars="none"
设置ListView的Item点击效果:
android:listSelector="RGB值"
设置ListView显示在第几页:
listView.setSelection(N);
平滑显示:
mListView.smoothScro;lBy(distance,duiration);
mListView.smoothScrollByoffset(offset);
mListView.smoothScrollToPosition(index);
代码实例:
public class MyListView extends ListView{
private int mMaxOvewDistance=100;
public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
DisplayMetrics metrics=context.getResources().getDisplayMetrics();
float density=metrics.density;
mMaxOvewDistance=(int) (density*mMaxOvewDistance);
}
public MyListView(Context context) {
super(context);
}
public MyListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {
return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX,mMaxOvewDistance, isTouchEvent);
}
}
上边参数表示可以沿着Y轴滑动的距离。
1、OnTouchListener事件
OnTouchListener是View自带的监听事件,我们一般监听ACTION_DOWN(按下状态),ACTION_UP(抬起状态)与ACTION_MOVE(移动状态)三个状态的坐标,就能够判断ListView是上滑还是下滑。相应事件如下:
View.OnTouchListener myTouchListener = 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;
}
};
2、OnScrollListener事件
OnScrollListener事件是ListView自带的事件,他封装了很多与ListView相关信息,用起来十分灵活。我们来看看它的使用方法。代码如下:
mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState){
case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
break;
case AbsListView.OnScrollListener.SCROLL_STATE_FLING:
break;
case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
break;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
我们观察这个OnScrollListener事件中有两个回调方法——OnScrollStateChanged()和OnScroll()。
我们来看看第一个方法OnScrollStateChanged(),这个方法根据scrollState(滚动状态)来确定其回调的次数。其中ScrollState有三种模式:
OnScrollListener.SCROLL_STATE_IDLE——滚动停止时。
OnScrollListener.SCROLL_STATE_TOUCH_SCROLL——正在滚动时。
OnScrollListener.SCROLL_STATE_FLING——手指用力滚动时,即用户离开以后,即ListView由于惯性会继续滚动一段时间。
3、item的监听事件
点击事件(OnItemClickListener)
onItemClick(AdapterView<?> parent, View view, int position, long id)
parent:官方解释为:The AdapterView where the click happened,也就是用户所点击的AdapterView,这个参数一般不用。
view:当前点击的列表项所对应的布局View对象,可通过这个参数获得相应的列表项内部的组件,进而对其进行操作。举个例子,假设有一个ListView,含有4个列表项,你点了第2个,那么通过view你就可以操作第2个列表项里面的TextView、ImageView等等的组件(假设存在)。
position:当前点击的列表项的位置,从0开始,也就是点击第n个,position就是n-1。
id:当前点击的列表项的序号,也是从0开始,一般情况下position和id是一样的。