ListView使用浅析

来源:互联网 发布:linux安装tomcat9 编辑:程序博客网 时间:2024/05/17 15:18

使用listview时候,需要书写以下几个地方:

1:新建一个l包含istview控件的layout

2:新建一个itemlayout(其中包含listview中item的格式:image+text)

3:新建一个Adapter extends BaseAdapter,这个adapter需要有构造函数(初始化mdata,LayoutInflater),并且重写getCount(),getItem(),getItemId()
,getView()这4个方法。

      还可以新建内部类:ViewHolder(只需将item控件作为变量即可),优化listview的视图缓存模式。

4:在主类中实例化listview和adapter,使用mylistview.setAdapter(myadapter),绑定listview和adapter,实现数据显示。


以下我们使用我们的实例来实现各个步骤:

1:新建一个l包含istview控件的layout

  1. <ListView   
  2.         android:id="@+id/list"  
  3.         android:layout_width="fill_parent"  
  4.         android:layout_height="fill_parent"></ListView>

2:新建一个itemlayout(其中包含listview中item的格式:image+text)

  1. <ImageView   
  2.             android:id="@+id/image"  
  3.             android:layout_width="wrap_content"  
  4.             android:layout_height="wrap_content"/>  
  5.         <TextView   
  6.             android:id="@+id/title"  
  7.             android:layout_width="wrap_content"  
  8.             android:layout_height="wrap_content"  
  9.            />  

3:新建一个Adapter extends BaseAdapter,这个adapter需要有构造函数(初始化mdata,LayoutInflater),并且重写getCount(),getItem(),getView()三个方法。

      还可以新建内部类:ViewHolder(只需将item控件作为变量即可),优化listview的视图缓存模式。(类代码来自《Android群英传》)

    1. public class MyAdspter extends BaseAdapter {  
    2.   
    3.     private List<Map<String, Object>> data;  
    4.     private LayoutInflater layoutInflater;  
    5.     private Context context;  
    6.     public MyAdspter(Context context,List<Map<String, Object>> data){  
    7.         this.context=context;  
    8.         this.data=data;  
    9.         this.layoutInflater=LayoutInflater.from(context);  
    10.     }  
    11.     /** 
    12.      * 组件集合,对应list.xml中的控件 
    13.      * @author Administrator 
    14.      */  
    15.     public final class Zujian{  
    16.         public ImageView image;  
    17.         public TextView title;  
    18.         
    19.     }  
    20.     @Override  
    21.     public int getCount() {  
    22.         return data.size();  
    23.     }  
    24.     /** 
    25.      * 获得某一位置的数据 
    26.      */  
    27.     @Override  
    28.     public Object getItem(int position) {  
    29.         return data.get(position);  
    30.     }  
    31.     /** 
    32.      * 获得唯一标识 
    33.      */  
    34.     @Override  
    35.     public long getItemId(int position) {  
    36.         return position;  
    37.     }  
    38.   
    39.     @Override  
    40.     public View getView(int position, View convertView, ViewGroup parent) {  
    41.         ViewHolder holder=null;  
    42.         if(convertView==null){  
    43.             holder=new ViewHolder ();  
    44.             //获得组件,实例化组件  
    45.             convertView=layoutInflater.inflate(R.layout.list, null);  
    46.             holder.image=(ImageView)convertView.findViewById(R.id.image);  
    47.             holder.title=(TextView)convertView.findViewById(R.id.title);   
    48.             convertView.setTag(holder);  
    49.         }else{  
    50.             holder=(ViewHolder)convertView.getTag();  
    51.         }  
    52.         //绑定数据  
    53.         holder.image.setBackgroundResource((Integer)data.get(position).get("image"));  
    54.         holder.title.setText((String)data.get(position).get("title"));  
    55.         return convertView;  
    56.     }  
    57.   public final class ViewHolder{
    58. public ImageView Img;
    59. public TextView title;
    60. }
    61. }  


4:在主类中实例化listview和adapter,使用mylistview.setAdapter(myadapter),绑定listview和adapter,实现数据显示。

(这里需要注意的是:因为我们的listview的item是个复杂的数据类型,我们使用的是一个item对应一个map,map中保存了value为image或者title,key为对应的image和text的内容,所有的map组成一个List,并且listview中的adapter初始化为接受(Context,list),这里的list就是我们的显示内容)


  1. public class MainActivity extends Activity {  
  2.   
  3.     private ListView listView=null;   
  4.     @Override  
  5.     protected void onCreate(Bundle savedInstanceState) {  
  6.         super.onCreate(savedInstanceState);  
  7.         setContentView(R.layout.activity_main);  
  8.         listView=(ListView)findViewById(R.id.list);  
  9.         List<Map<String, Object>> list=getData();  
  10.         listView.setAdapter(new MyAdspter(this, list));  
  11.     }  
  12.     @Override  
  13.     public boolean onCreateOptionsMenu(Menu menu) {  
  14.         getMenuInflater().inflate(R.menu.main, menu);  
  15.         return true;  
  16.     }  
  17.   
  18.     public List<Map<String, Object>> getData(){  
  19.         List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();  
  20.         for (int i = 0; i < 10; i++) {  
  21.             Map<String, Object> map=new HashMap<String, Object>();  
  22.             map.put("image", R.drawable.ic_launcher);  
  23.             map.put("title""这是一个标题"+i);   
  24.             list.add(map);  
  25.         }  
  26.         return list;  
  27.     }  
  28. }  

结语

到此,我们的listview就算是做好了。

0 0
原创粉丝点击