zoukankan      html  css  js  c++  java
  • Android UI ListView的使用

    一、ListView的理解
       1.什么ListView?
          一种用来显示多个可滑动项(Item)列表的的ViewGroup

        需要使用Adapter将集合数据和每一个Item所对应的布局动态适配到ListView中显示
         显示列表: listView.setAdapter(adapter)
         更新列表: adapter.notifyDataSetChanged()

    二、实现ListView的三种常用方式
       1、ArrayAdapter应用
          ArrayAdapter(Context context,int resource,T[] objects)
          ArrayAdapter(Context context,int resource,List<T> objects)
      
          context:上下文对象,一般为Activity对象
          resourcce:Item的布局文件标识
          objects:需要显示的数据集合

       2.案例

       1.创建一个 layout xml文件

        

    1 <ListView xmlns:android="http://schemas.android.com/apk/res/android"
    2     android:id="@+id/listView1"
    3     android:layout_width="fill_parent"
    4     android:layout_height="fill_parent" 
    5     >
    6 
    7 </ListView>

      2.创建 layout 文件  布局 ListView 子元素 items

    1 <?xml version="1.0" encoding="utf-8"?>
    2 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
    3     android:layout_width="match_parent"
    4     android:layout_height="50dp"
    5     android:layout_marginLeft="20sp"
    6     android:gravity="fill_vertical"
    7     android:id="@+id/item_adapter" >
    8 </TextView>

      3. 代码实现

     1 package com.example.android_ui_listview;
     2 
     3 import android.app.Activity;
     4 import android.os.Bundle;
     5 import android.widget.ArrayAdapter;
     6 import android.widget.ListView;
     7 
     8 public class MainActivity extends Activity {
     9     @Override
    10     protected void onCreate(Bundle savedInstanceState) {
    11         super.onCreate(savedInstanceState);
    12         setContentView(R.layout.activity_adapter);
    13         
    14         // 初始化控件
    15         ListView adapter_lv = (ListView) findViewById(R.id.listView1);
    16         // 1.准备集合数据
    17         String[] strs = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "09",
    18                 "89", "77", "55", "ut", "sd", "gj", "gjk", "qw", "jhk" };
    19         // 2.准备ArrayAdapter对象
    20         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    21                 R.layout.adapter_item, strs);
    22         // 3.设置Adapter显示列表
    23         adapter_lv.setAdapter(adapter);
    24     }
    25 }

    效果:


      
     2、SimpleAdapter应用
        SimpleAdapter(Context context,List<? entends Map<String,?>> data,int resource,String[] from,int[] to) 
      
        context:上下文对象,一般为Activity对象
        data:需要显示的数据集合
        resource:Item布局文件的标识
        from:Map对象的Key的数组,用于得到对应的value
        to:Item布局文件中的子View的id的数组

       1).创建 layout

    1 <ListView xmlns:android="http://schemas.android.com/apk/res/android"
    2     android:id="@+id/listView1"
    3     android:layout_width="fill_parent"
    4     android:layout_height="fill_parent" 
    5     >
    6 
    7 </ListView>

      2).  item 布局

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:orientation="horizontal" 
     6     android:id="@+id/simple_adapter">
     7 
     8     <ImageView
     9         android:id="@+id/siple_iv"
    10         android:layout_width="60dp"
    11         android:layout_height="70dp"
    12         android:src="@drawable/ic_launcher" />
    13 
    14     <LinearLayout
    15         android:layout_width="wrap_content"
    16         android:layout_height="69dp"
    17         android:layout_marginRight="15dp"
    18         android:gravity="center_vertical"
    19         android:orientation="vertical">
    20 
    21         <TextView
    22             android:id="@+id/siple_tv1"
    23             android:layout_width="wrap_content"
    24             android:layout_height="wrap_content"
    25             android:text="@string/adapter_test" />
    26 
    27         <TextView
    28             android:id="@+id/siple_tv2"
    29             android:layout_width="wrap_content"
    30             android:layout_height="wrap_content"
    31             android:text="@string/adapter_number" />
    32     </LinearLayout>
    33 
    34 </LinearLayout>

      3)代码实现

     1 package com.example.android_ui_listview;
     2 
     3 import java.util.ArrayList;
     4 import java.util.HashMap;
     5 import java.util.List;
     6 import java.util.Map;
     7 
     8 import android.app.Activity;
     9 import android.os.Bundle;
    10 import android.widget.ListView;
    11 import android.widget.SimpleAdapter;
    12 
    13 public class MainActivity extends Activity {
    14     @Override
    15     protected void onCreate(Bundle savedInstanceState) {
    16         super.onCreate(savedInstanceState);
    17         setContentView(R.layout.activity_adapter);
    18         // 初始化控件ListView
    19         ListView listView = (ListView) findViewById(R.id.listView1) ;
    20         
    21         //1.准备数据
    22         List<Map<String, Object>> list = new ArrayList<Map<String,Object>>() ;
    23         for(int i=0;i<10;i++){
    24             Map<String,Object> map = new HashMap<String,Object>() ;
    25             // key对应的from数组
    26             map.put("siple_iv", R.drawable.ic_launcher) ;
    27             map.put("siple_tv1", "价格:"+(i*3+0.1)) ;
    28             map.put("siple_tv2", i+100) ;
    29             list.add(map) ;
    30         }
    31         
    32         //2.准备SimpleAdapter对象
    33             // 准白
    34         String[] from = { "siple_iv", "siple_tv1", "siple_tv2" };
    35             // 对应 Item 子样式 里面控件的id
    36         int[] to = { R.id.siple_iv, R.id.siple_tv1,R.id.siple_tv2} ;
    37         SimpleAdapter simpleAdapter = new SimpleAdapter(this, list,R.layout.siple_adapter, from, to) ;
    38         
    39         //3.添加到listView里面
    40         listView.setAdapter(simpleAdapter) ;
    41     }
    42 }

      4).   

         

     3、BaseAdapter(抽象类)应用
        public view getView(int position,View converView,ViewGroup parent)
      
        返回指定下标所对应的item的View对象
        position:下标
        converView:可复用的缓存Item视图对象,前n+1个为null
        parent:ListView对象

      1.layout xml配置

    1 <ListView xmlns:android="http://schemas.android.com/apk/res/android"
    2     android:id="@+id/listView1"
    3     android:layout_width="fill_parent"
    4     android:layout_height="fill_parent" 
    5     >
    6 
    7 </ListView>

      2.ListView子元素 item 布局

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:orientation="horizontal" 
     6     android:id="@+id/simple_adapter">
     7 
     8     <ImageView
     9         android:id="@+id/siple_iv"
    10         android:layout_width="60dp"
    11         android:layout_height="70dp"
    12         android:src="@drawable/ic_launcher" />
    13 
    14     <LinearLayout
    15         android:layout_width="wrap_content"
    16         android:layout_height="69dp"
    17         android:layout_marginRight="15dp"
    18         android:gravity="center_vertical"
    19         android:orientation="vertical">
    20 
    21         <TextView
    22             android:id="@+id/siple_tv1"
    23             android:layout_width="wrap_content"
    24             android:layout_height="wrap_content"
    25             android:text="@string/adapter_test" />
    26 
    27         <TextView
    28             android:id="@+id/siple_tv2"
    29             android:layout_width="wrap_content"
    30             android:layout_height="wrap_content"
    31             android:text="@string/adapter_number" />
    32     </LinearLayout>
    33 
    34 </LinearLayout>

      3.创建一个简单实体类

     1 package com.example.android_ui_listview;
     2 
     3 public class ShopInfo {
     4     private int image ;            //图片
     5     private String sname ;        //名称
     6     private String price ;        //价格
     7     
     8     public ShopInfo() {
     9         super();
    10     }
    11     public ShopInfo(int image, String sname, String price) {
    12         super();
    13         this.image = image;
    14         this.sname = sname;
    15         this.price = price;
    16     }
    17     public int getImage() {
    18         return image;
    19     }
    20     public void setImage(int image) {
    21         this.image = image;
    22     }
    23     public String getSname() {
    24         return sname;
    25     }
    26     public void setSname(String sname) {
    27         this.sname = sname;
    28     }
    29     public String getPrice() {
    30         return price;
    31     }
    32     public void setPrice(String price) {
    33         this.price = price;
    34     }
    35 }

      4.activity实现

     1 package com.example.android_ui_listview;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import android.app.Activity;
     7 import android.os.Bundle;
     8 import android.view.View;
     9 import android.view.ViewGroup;
    10 import android.widget.BaseAdapter;
    11 import android.widget.ImageView;
    12 import android.widget.ListView;
    13 import android.widget.TextView;
    14 
    15 
    16 public class MainActivity extends Activity {
    17     List<ShopInfo> list ;
    18     @Override
    19     protected void onCreate(Bundle savedInstanceState) {
    20         super.onCreate(savedInstanceState);
    21         setContentView(R.layout.activity_adapter);
    22         
    23         // 初始化 ListView 
    24         ListView listView = (ListView) findViewById(R.id.listView1) ;
    25         
    26         // 1.准备数据
    27         list = new ArrayList<ShopInfo>() ;
    28         for(int i=0;i<100;i++){
    29             ShopInfo s = new ShopInfo(R.drawable.ic_launcher,"名称:Android"+(i+1)+"号","价格:"+(i*12)+"$") ; 
    30             list.add(s) ;
    31         }
    32         
    33         // 2.准备BaseAdapter对象
    34         MyBaseAdapter baseAdapter = new MyBaseAdapter() ;
    35         
    36         // 3.添加listView里面
    37         listView.setAdapter(baseAdapter) ;
    38     }
    39     
    40     class MyBaseAdapter extends BaseAdapter{
    41         // 返回集合数据的数量
    42         @Override
    43         public int getCount() {
    44             return list.size();
    45         }
    46         //返回指定下标对应的数据对象
    47         @Override
    48         public Object getItem(int position) {
    49             return list.get(position);
    50         }
    51 
    52         @Override
    53         public long getItemId(int position) {
    54             // TODO Auto-generated method stub
    55             return 0;
    56         }
    57         /**
    58          * 
    59          * 返回指定下标对应的item的view对象
    60          * position:下标
    61          * convertview:可重复利用的控件
    62          * parent:ListView对象
    63          * */
    64         @Override
    65         public View getView(int position, View convertView, ViewGroup parent) {
    66             //加载item的布局,得到View对象
    67             if(convertView == null){    //如果直接创建,很有可能照成应用崩毁
    68                 convertView = View.inflate(MainActivity.this, R.layout.siple_adapter, null) ;
    69             }
    70             //根据position设置对应的数据
    71                 //得到当前行的数据对象
    72             ShopInfo s = list.get(position) ;
    73                 //得到子view对象
    74             ImageView imageView = (ImageView) convertView.findViewById(R.id.siple_iv) ;
    75             TextView tv1 = (TextView) convertView.findViewById(R.id.siple_tv1) ;
    76             TextView tv2 = (TextView) convertView.findViewById(R.id.siple_tv2) ;
    77             // 设置资源
    78             imageView.setImageResource(s.getImage()) ;
    79             tv1.setText(s.getSname()) ;
    80             tv2.setText(s.getPrice()) ;
    81             
    82             return convertView;
    83         }
    84         
    85     }
    86 }

    实现效果

     

    总结: SimpleAdapter 和 BaseAdapter 很类似

      SimpleAdapter是把数据存放在Map中,根据from 和to 对应的

      BaseAdapter是把数据存放到自己定义的Pojo中 在根据继承BaseAdapter 实现里面的抽象方法

      

  • 相关阅读:
    如何查看Linux进程详情?(ps命令)
    6款免费网络延迟测试工具
    Java中的JVM和Redis,你了解的透彻么?
    thinkPHP 5/thinkPHP 5.1 的apache重写文件
    redisclient客户端管理工具
    鼠标经过时切换图片
    点击页面元素页面向上滚动
    MongoDB客户端管理工具--MongoDB Compass
    JS继承
    JavaScript面向对象基础
  • 原文地址:https://www.cnblogs.com/ChangFen/p/6099198.html
Copyright © 2011-2022 走看看