对于ListView和ScrollView,个人一直是比较纠结的。
毕竟是初学者,开始觉得ScrollView可以直接把View给添加进去,不需要搞Adapter来适配,好像挺“方便”的!?
后来逐渐的觉得ListView在使用上还是有其比ScrollView方便之处的。
刚接触Adapter的时候,肯定觉得挺头疼的,
特别是又恰巧是刚接触Android的时候,
完全不理解这样实现的机制是怎样的,
后来通过一些查阅和思考,大致明白了一些关于ListView和Adapter之间的一些关系吧!
OK!一步一步来!往简单的说,从Adapter开始!
(其实这个网上的资料非常多)
我们一般都会弄一个内部类继承BaseAdapter,然后通过修改其@Override的方法来达到我们的目的!
Adapter适配器是做什么用的呢?
我的理解就是,ListView通过适配器,理解我们要对ListView里加入什么内容,
而我们在适配器里@Override的方法里,就是让我们写上我们要告诉这个ListView的一些基本内容!
写一个private class "类名称" extends BaseAdapter{}
然后eclipse就会提示你要添加unimpliment的方法。
最好,先把这个类的构造函数写好!
构造函数需要什么内容呢?
我建议是要有一个Context,为什么?下面会告诉你!
好,先说每个方法!
首先是getCount()方法,这个方法要返回你要添加进ListView里的东西的总数,
也就是要告诉ListView,我添加进列表里的东西有多少!
我这里的mArray就是一个简单的List<String>,
可能有人会问,我为什么不直接返回mListView的长度呢?
这里我是这么考虑的,就是我们的ListView可能会添加”头“和”尾“,来进行一些更新之类的交互,
就像微博之类的下拉刷新或者到底后加载,所以干脆直接用我们添加的内容的长度(记得确保已经初始化哦)!
@Override
public int getCount() {
return mArray == null ? 0 : mArray.size();
}
接下来就是getItem(int position)方法了,这个是做什么呢?
ListView要加载内容,肯定要获得内容才可以加载,对吧!
这个方法就是要让ListView可以通过一个position来获得我们要添加在相应位置的内容的!
内容是什么?当然是刚才mArray里相应位置的东西啦!
@Override
public Object getItem(int position) {
return mArray.get(position);
}
这个getItemId(int position)方法,应该是为了方便ListView进行管理的,
简单说,我们就按原来的position来让他管理,原本是几就是几,省事,直接返回position!
@Override
public long getItemId(int position) {
return position;
}
OK,到重头戏了!getView()方法!
这里要实现的东西就比较多了,我就不具体贴出来了!
这个也很好理解,个人的理解就是ListView要方便的得到自己里面的每个View嘛!
(不然人家怎么知道你的mArray里的数据,要怎么填入ListView里的每个View,对吧!)
再说明白一些,例如我是一个ListView!
我问你,我要在第一个位置position填充你的内容,我把我第一个位置的”容器“给你,你告诉我要怎么填?
OK,代码部分就是你告诉我的了!
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return null;
}
这里面一般我们会怎么做呢?
一般,我们添加到ListView里的每个View都是xml定义好的!
好,一开始构造过来的Context就有用了!
通过LayoutInflater.from(context).inflate(R.layout.你定义的xml,null);
获得你要添加进去的View!用来干嘛?当然赋给convertView啦!
如果我们定义的xml里有一个TextView,好!
那我们就TextView tTextView = (TextView)convertView.findViewById(R.id.你的textview);
这样就可以通过position,在mArray里找到我们相应位置的内容,让TextView显示出来!
当然,最后要return convertView!
把这个我们包装好的View给回ListView,让它在列表里显示!
Adapter适配器方面的笔记就做到这里!
接下来到Activity里的内容,
首先,你的Activity里必须要有一个ListView,甭管你是xml里定义还是代码加进去。
findViewById就不说了!
mListView.setAdapter(mAdapter);
mListView.setOnScrollListener(this);
mListView.setOnItemClickListener(this);
这三句是什么意思?
第一句是让这个ListView和你的适配器关联在一起!
第二第三句,由于我的Activity implement了这2个接口,所以直接关联this即可!
OnScrollListener呢,就是管理ListView滑动的,有2个@Override!以后再记录了。
OnItemClick就很好理解,就是里面的每个Item的点击!有一个@Override,也以后再讲!
OK,这次笔记就大概到这里!无论是ListView还是ScrollView,能达到目的,自己用起来好用,就是最好的!