zoukankan      html  css  js  c++  java
  • 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了。
    
    
    


    
    
    
    






  • 相关阅读:
    一些问题
    为什么Python在列表,元组和字典的末尾允许使用逗号?
    #!/bin/bash
    gitbook 入门教程之小白都能看懂的 Gitbook 插件开发全流程
    go 学习笔记之10 分钟简要理解 go 语言闭包技术
    gitbook 入门教程之还在搞公众号互推涨粉?gitbook 集成导流工具,轻轻松松躺增粉丝!
    go 学习笔记之仅仅需要一个示例就能讲清楚什么闭包
    go 学习笔记之学习函数式编程前不要忘了函数基础
    go 学习笔记之无心插柳柳成荫的接口和无为而治的空接口
    go 学习笔记之万万没想到宠物店竟然催生出面向接口编程?
  • 原文地址:https://www.cnblogs.com/huangjialin/p/5997317.html
Copyright © 2011-2022 走看看