Android UI ListView的使用

来源:http://www.cnblogs.com/ChangFen/archive/2016/11/24/6099198.html
-Advertisement-
Play Games

一、ListView的理解 1.什麼ListView? 一種用來顯示多個可滑動項(Item)列表的的ViewGroup 需要使用Adapter將集合數據和每一個Item所對應的佈局動態適配到ListView中顯示 顯示列表: listView.setAdapter(adapter) 更新列表: ad ...


一、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 實現裡面的抽象方法

  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近看一下css3d的一些特性,想著也實驗學習一下,製作個小demo之類的。就練習了一下。開發一個粗糙的選擇木馬效果,如圖 其實就是找到角度和位置,計算每根柱子的旋轉角度擺放到3d空間的置頂位置即可。然後利用css的animate屬性讓3d舞臺無線旋轉,就有了一簡易的旋轉木馬效果。感興趣的可以看一下 ...
  • 某一時候,我們不想在form的所有必填的域均完成之後,再去使用mouse去點擊銨鈕來提交數據。而是直接按回車去focus提交的銨鈕來提交。 可以寫jQuery script程式: ...
  • 看效果:Html: CSS: jQuery: 或者使用連寫法: ...
  • ...
  • 通過js實現DropDownList下拉框可以直接輸入信息也可以直接選擇 ...
  • 在Android開發中,我們經常會需要在Android界面上彈出一些對話框,比如詢問用戶或者讓用戶選擇。這些功能我們叫它Android Dialog對話框,AlertDialog實現方法為建造者模式。下麵我們簡單模擬一個挑媳婦的選擇確定對話框(單選)對話框,不同於示例二之處在於本次只要不確定就可以後 ...
  • 首先打開終端(在搜索裡面搜索Te即可出來) 然後輸入 cd /Library/Java/Home/bin/ 然後這步很關鍵,由於我們用的是當前用戶,所以沒有最高許可權,不能在Library文件夾下生成任何文件,所以照抄網上的方法是無法創建成功的,複製粘貼步驟4的內容。 keytool -genkey ...
  • 在Android開發中,我們經常會需要在Android界面上彈出一些對話框,比如詢問用戶或者讓用戶選擇。這些功能我們叫它Android Dialog對話框,AlertDialog實現方法為建造者模式。下麵我們簡單模擬一個選花魁的簡單普通選項(單選)對話框,如下圖: Layout界面代碼: Java功 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...