Android:控件ListView列表項與適配器結合使用


Listview是用來展示一些重復性的數據用的,比如一些列表集合數據展示到手機,需要適配器作為載體獲取數據,最后將數據填充到布局。

ListView里面的每個子項Item可以使一個字符串,也可以是一個組合控件。而適配器就是 Item數組,動態數組有多少元素就生成多少個Item;

 

ArrayAdapter數組適配器比較簡單,適合純文字。布局文件可以自己寫,也可以用系統的。

ArrayAdapter適配器實例:

下載>>

歸納步驟:

1、准備數據源

2、新建適配器,綁定數據源

3、視圖加載適配器

在布局文件中加入一個ListView控件:

<ListView android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    > 

程序中:適配器的作用是數據和視圖之間的橋梁

list = (ListView)findViewById(R.id.list);

//定義數據源作為ListView內容 String [] arr_data = {"數據1","數據2","數據3","數據4"};
//新建一個數組適配器ArrayAdapter綁定數據,參數(當前的Activity,布局文件,數據源) arr_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arr_data);
//視圖(ListView)加載適配器 list.setAdapter(arr_adapter);

預覽效果:

也可以使用自定義布局:

android.R.layout.simple_list_item_1

改為:

R.layout.name 里面只放一個TextView

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
         android:id="@android:id/text1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="#ff0000"
        />

SimpleAdapter適配器實例:

相比ArrayAdapter,SimpleAdapter則有很強的擴展性,可以自定義出各種效果。

下載>>>

歸納步驟:

1、准備數據源:指定由Map組成的List數據源

2、新建適配器,設置鍵值名和對應控件id,綁定數據

3、視圖加載適配器

先看一下SimpleAdapter 的構造函數:

new SimpleAdapter(context, data, resource, from, to)

參數:

context  ------SimpleAdapter關聯的View的運行環境 

data  ---------一個Map組成的List。在列表中的每個條目對應列表中的一行,每一個map中應該包含所有在from參數中指定的鍵

resource ------ 一個定義列表項的布局文件的資源ID。布局文件將至少應包含那些在to中定義了的ID

from ---------- 一個將被添加到Map映射上的鍵名

to  -------------將綁定數據的視圖的ID,跟from參數對應

程序代碼:

package com.example.testsimpleadapter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import android.support.v7.app.ActionBarActivity;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.os.Bundle;

public class MainActivity extends ActionBarActivity {
    private ListView mylist;
    private SimpleAdapter simp_ada;
    private ArrayList<Map<String, Object>> arr_data;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list);
        mylist = (ListView) findViewById(R.id.mylist);
        
        //每一行數據就是一個Map,指定由Map組成的List,
        arr_data = new ArrayList<Map<String, Object>>();

        // 新增數據
        for (int i = 0; i < 20; i++) {
            Map map = new HashMap<String, Object>();
            //map放入兩個鍵值對,鍵名與from對應,
            map.put("pic", R.drawable.ic_launcher);
            map.put("text", "數據" + i);
            //往list添加數據
            arr_data.add(map);
        }

        // 新建適配器 ,綁定數據
        String[] from = { "pic", "text" };
        int[] to = { R.id.pic, R.id.text };
        simp_ada = new SimpleAdapter(this, arr_data, R.layout.listitem,from,to);
        
        // 加載適配器
        mylist.setAdapter(simp_ada);
    }

}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" 
    >
    
<ImageView 
    android:id="@+id/pic"
    android:layout_marginLeft="6dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_launcher"
  
    />
<TextView 
    android:id="@+id/text"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:gravity="center_vertical"
    android:text="文字"
    />
</LinearLayout>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM