1. 程式人生 > >Android開發之ListView

Android開發之ListView

在安卓開發中,List View很常用,通過List View使應用程式可以在一個頁面顯示多個條目資訊,並且每個條目資訊佈局是一樣的。
以下是一個例項:

main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical" android:layout_width
="match_parent" android:layout_height="match_parent">
<LinearLayout android:id="@+id/ll_farmInfo" android:layout_width="match_parent" android:layout_height="30dp" android:orientation="horizontal"> <TextView android:id="@+id/textView1"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0.7" android:gravity="center" android:text="棚區" android:layout_marginTop="8dp" />
<TextView android:id="@+id/textView2"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0.7" android:gravity="center" android:text="面積" android:layout_marginTop="8dp" />
<TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:text="作物" android:layout_marginTop="8dp" /> <TextView android:id="@+id/textView4" android:layout_width="72dp" android:layout_height="wrap_content" android:gravity="center" android:text="" android:layout_marginTop="8dp" /> </LinearLayout> <ListView android:id="@+id/lv_farmland" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/ll_farmInfo"> </ListView> </LinearLayout>

activity_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/tv_area"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.7"
        android:gravity="center"
        android:text="A棚區" />

    <TextView
        android:id="@+id/tv_plantArea"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.7"
        android:gravity="center"
        android:text="TextView" />
    <TextView
        android:id="@+id/tv_plant"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:text="TextView" />

    <Button
        android:id="@+id/bt_showInfo"
        android:layout_width="72dp"
        android:layout_height="38dp"
        android:text="檢視" />

</LinearLayout>

主程式MainActivity.class

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

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

public class MainActivity extends AppCompatActivity {

    String[] from={"area","plantArea","plant"};              //這裡是ListView顯示內容每一列的列名
    int[] to={R.id.tv_area,R.id.tv_plantArea,R.id.tv_plant};   //這裡是ListView顯示每一列對應的list_item中控制元件的id
    private String[] area = {"A","B","C","D","E","F","G","H","I","J"};
    private String[] plantArea = {"1","2","3","4","5","6","7","8","9","10"};
    private String[] plants = {"A","B","C","D","E","F","G","H","I","J"};

    ArrayList<HashMap<String,String>> list=null;
    HashMap<String,String> map=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //建立ArrayList物件;
        list=new ArrayList<HashMap<String,String>>();
        //將資料存放進ArrayList物件中,資料安排的結構是,ListView的一行資料對應一個HashMap物件,
        //HashMap物件,以列名作為鍵,以該列的值作為Value,將各列資訊新增進map中,然後再把每一列對應
        //的map物件新增到ArrayList中

        for(int i=0; i<10; i++){
            map=new HashMap<String,String>();       //為避免產生空指標異常,有幾列就建立幾個map物件
            map.put("area", area[i]);
            map.put("plantArea", plantArea[i]);
            map.put("plant",plants[i]);
            list.add(map);
        }

        //建立一個SimpleAdapter物件
        SimpleAdapter adapter=new SimpleAdapter(this,list,R.layout.activity_list_item,from,to);
        //呼叫ListActivity的setListAdapter方法,為ListView設定介面卡
        ListView listView = (ListView)findViewById(R.id.lv_farmland);
        listView.setAdapter(adapter);
    }
}

這裡只是使用了SimpleAdapter,比較適用於文字顯示。