listview的简单实现

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是一样的。

 

 

          

 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值