Listview的使用

时间:2022-10-24 04:08:23

最近一个多月忙着使用新的技术来做项目,现在项目上线了,嗯,发现android有些生疏了,所以今天特地写了这一篇博客来相信的讲解一些基础知识,同事呢,也可以让我温故知新一下。进入正题。

什么是listview呢,它有什么作用呢,并且应该怎么使用呢?下面就好好讲解一下。

listview,你可以这样理解,这是一个列表,在手机屏幕上以列表的形式展示每一条数据,比如我们很熟悉的腾讯qq中腾讯新闻,那一条条新闻,就是使用了listview来实现,通过listview来把这些数据展示到手机屏幕上。我个人认为,listview这个控件在android中是相当相当的重要的。

下面,我们看看怎么使用它。

首先,我们在布局文件中将这个控件添加进来

<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none" />
android:scrollbars="none"这个是listView中的一个属性,作用是去掉滑动进度条。而id的作用主要是获得获得这个listview控件,然后我们在java文件中通过findViewById(R.id.listview)来拿到这个控件。好下面最主要的部分来了。
我们知道,listview的作用是将数据以列表的形式展示出来,那么那么列表中每一个item中的数据是是怎么弄呢?adapter的作用就出来了,adapter 也叫适配器,你可以理解为是一个中转站。
那么adapter怎么用呢,上代码:
  1. public class ListViewAdapter extends BaseAdapter {
  2. View[] itemViews;
  3. public ListViewAdapter(List<info> mlistInfo) {
  4. // TODO Auto-generated constructor stub
  5. itemViews = new View[mlistInfo.size()];
  6. for(int i=0;i<mlistInfo.size();i++){
  7. info getInfo=(info)mlistInfo.get(i);    //获取第i个对象
  8. //调用makeItemView,实例化一个Item
  9. itemViews[i]=makeItemView(
  10. getInfo.getTitle(), getInfo.getDetails(),getInfo.getAvatar()
  11. );
  12. }
  13. }
  14. public int getCount() {
  15. return itemViews.length;
  16. }
  17. public View getItem(int position) {
  18. return itemViews[position];
  19. }
  20. public long getItemId(int position) {
  21. return position;
  22. }
  23. //绘制Item的函数
  24. private View makeItemView(String strTitle, String strText, int resId) {
  25. LayoutInflater inflater = (LayoutInflater) ListTestActivity.this
  26. .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  27. // 使用View的对象itemView与R.layout.item关联
  28. View itemView = inflater.inflate(R.layout.item, null);
  29. // 通过findViewById()方法实例R.layout.item内各组件
  30. TextView title = (TextView) itemView.findViewById(R.id.title);
  31. title.setText(strTitle);    //填入相应的值
  32. TextView text = (TextView) itemView.findViewById(R.id.info);
  33. text.setText(strText);
  34. ImageView image = (ImageView) itemView.findViewById(R.id.img);
  35. image.setImageResource(resId);
  36. return itemView;
  37. }
  38. public View getView(int position, View convertView, ViewGroup parent) {
  39. if(convertView == null)

    {

    convertView = mInflater.inflate(R.layout.list_item, null);

    }

    ImageView img = (ImageView)convertView.findViewById(R.id.img)

    TextView title = (TextView)convertView.findViewById(R.id.title);

    TextView info = (TextView)ConvertView.findViewById(R.id.info);

    img.setImageResource(R.drawable.ic_launcher);

    title.setText("Hello");

    info.setText("world");

    return convertView;

    }

  40. }
  41. public class ViewHolder(){
  42. //获取控件
  43. }
  44. }

首先继承BaseAdapter,然后实现四个方法,

getCount() ,这个方法的作用的是显示listview中item的个数。getItem()是得到每一个item的位置,getItemId(),是指每一个item的ID,最后一个方法,也是最重要的一个方法getView(),这个方法涉及到整个listview的机制,比如复用,

该怎么解释这个复用机制的,举个例子,我们用10个圆形滚木,要移动一个很重的物体,当物体滚到前面,物体地下最后面的一个滚木就拿到最前面,listview复用也是这个原理。

先创建一个内部类,viewholder可以理解为在每一个滚木中做一个标记,等下一看到这个标记的时候,系统就可以知道,又用到这个滚木了,然后通过判断convertView使用为空,如果为空的话,说明这个滚木没有使用过,则系统会填充器LayoutInflater来将这个滚木做一个标记,如果不为空的话,说明使用过了,则也是TextView title = (TextView)convertView.findViewById(R.id.title);通过convertView来获取控件。

好了,适配器的讲解到这,那么我们在java代码中怎样使用它的,在java代码中通过findViewById这个方法来获取listview这个控件,然后

ListViewAdapter mAdapter = new ListViewAdapter(),来得到这个适配器,最后通过listview.setAdapter(mAdapter),就OK了。