1. 程式人生 > >ListView新增simple介面卡,使ListView可以顯示一個ImageView和兩個textview

ListView新增simple介面卡,使ListView可以顯示一個ImageView和兩個textview

1.首先在activity_main.xml中建立ListView控制元件

<?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">

    <ListView
        android:id="@+id/lv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:dividerHeight="2px"
        android:divider="#0000ff">
    </ListView>
</LinearLayout>

2.新建一個list_item.xml 存放每一行資料需要的控制元件

<?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">

    <ImageView      //圖片控制元件
        android:id="@+id/iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <TextView   //文字控制元件1
            android:id="@+id/tv1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView   //文字控制元件2
            android:id="@+id/tv2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>

</LinearLayout>

3.java程式碼

package com.example.bluehat.wangshibo_ex3_2;

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;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView lv=(ListView)findViewById(R.id.lv);
        //建立一個list陣列物件data,data中存放的是Map物件
        List<Map<String,Object>> data=new ArrayList<Map<String,Object>>();
        //新建多個Map物件
        Map<String,Object> map1=new HashMap<String, Object>();
        //向Map物件中寫入值,前面的是資料列名,後面是具體的資料
        map1.put("name","name0");
        map1.put("age","10");
        map1.put("icon",R.mipmap.ic_launcher);
        Map<String,Object> map2=new HashMap<String, Object>();
        map2.put("name","name1");
        map2.put("age","11");
        map2.put("icon",R.mipmap.ic_launcher);
        Map<String,Object> map3=new HashMap<String, Object>();
        map3.put("name","name2");
        map3.put("age","12");
        map3.put("icon",R.mipmap.ic_launcher);
        Map<String,Object> map4=new HashMap<String, Object>();
        map4.put("name","name3");
        map4.put("age","13");
        map4.put("icon",R.mipmap.ic_launcher);
        Map<String,Object> map5=new HashMap<String, Object>();
        map5.put("name","name4");
        map5.put("age","14");
        map5.put("icon",R.mipmap.ic_launcher);
        //將map物件新增到arrayList陣列data中
        data.add(map1);
        data.add(map2);
        data.add(map3);
        data.add(map4);
        data.add(map5);
        //為listview裝配介面卡
        lv.setAdapter(new SimpleAdapter(this,data,R.layout.list_item,new String[]{"name","age","icon"},new int[]{R.id.tv1, R.id.tv2,R.id.iv}));
                                              //通過R.layout.list_item這個引數找到list_item,然後把data裡面的資料顯示在它上面各自對應的控制元件上,再一起作為一行在listview上顯示出來
    }
        // 至於為什麼圖片在左邊顯示,兩行文字在右邊則取決於list_item.xml
}

4.效果顯示

總結:

上面java程式碼中的 name  age  icon  可以理解為資料庫表中的列名。map.put()要做的就是把資料插入到列中去。那麼每一列可以有很多個數據,這就是為什麼有多個map物件。

物件 name age icon
map1 name0 10 R.xxx
map2 name1 11 R.xxx
map3 name2 12 R.xxx
map4 name3 13 R.xxx

如果想使listview的一行顯示更多資料,道理也一樣。 相當於再增加一列資料就好了。