Listview的使用

最近一个多月忙着使用新的技术来做项目,现在项目上线了,嗯,发现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.     
  4.         public ListViewAdapter(List<info> mlistInfo) {  
  5.             // TODO Auto-generated constructor stub  
  6.             itemViews = new View[mlistInfo.size()];              
  7.             for(int i=0;i<mlistInfo.size();i++){  
  8.                 info getInfo=(info)mlistInfo.get(i);    //获取第i个对象  
  9.                 //调用makeItemView,实例化一个Item  
  10.                 itemViews[i]=makeItemView(  
  11.                         getInfo.getTitle(), getInfo.getDetails(),getInfo.getAvatar()  
  12.                         );  
  13.             }  
  14.         }  
  15.   
  16.         public int getCount() {  
  17.             return itemViews.length;    
  18.         }  
  19.     
  20.         public View getItem(int position) {    
  21.             return itemViews[position];    
  22.         }    
  23.     
  24.         public long getItemId(int position) {    
  25.             return position;    
  26.         }  
  27.           
  28.         //绘制Item的函数  
  29.         private View makeItemView(String strTitle, String strText, int resId) {    
  30.             LayoutInflater inflater = (LayoutInflater) ListTestActivity.this    
  31.                     .getSystemService(Context.LAYOUT_INFLATER_SERVICE);    
  32.     
  33.             // 使用View的对象itemView与R.layout.item关联  
  34.             View itemView = inflater.inflate(R.layout.item, null);  
  35.               
  36.             // 通过findViewById()方法实例R.layout.item内各组件  
  37.             TextView title = (TextView) itemView.findViewById(R.id.title);    
  38.             title.setText(strTitle);    //填入相应的值  
  39.             TextView text = (TextView) itemView.findViewById(R.id.info);    
  40.             text.setText(strText);    
  41.             ImageView image = (ImageView) itemView.findViewById(R.id.img);    
  42.             image.setImageResource(resId);  
  43.               
  44.             return itemView;    
  45.         }  
  46.     
  47.           
  48.         public View getView(int position, View convertView, ViewGroup parent) {    
  49.             

    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;

            }

     
  50.         }
  51. public class ViewHolder(){
  52. //获取控件
  53. }
  54.     
  55.     }     

首先继承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了。












原文地址:https://www.cnblogs.com/huangjialin/p/5997317.html