Android開發學習三+:ListView的使用

《Android開發實戰 從學習到產品》李瑞琪編著 學習筆記

  ListView是常用的組件,以列表形式展示具體內容,且能根據數據的長度自適應顯示。以垂直方式排列內部 item,item可以被定義爲各種複雜界面,一般用於數據集展示。
  
  ListView(列表顯示)3要素:用來展示列表的View,即item、把數據映射到ListView上的item適配器、具體將被映射的字符串、圖片基本控件等數據
  
  適配器按自定義程度分3種:ArrayAdapter、SimpleAdapter及通過繼承BaseAdapter來自定義Adapter。

1.ArrayAdapter適配器實現ListView

.
  使用ArrayAdapter實現ListView只能展示一行字,功能簡單。實例:
  (1)在Activity對應的佈局文件中加入Listview控件:

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

本例使用ArrayAdapter,不需要自建item,系統給使用ArrayAdapter適配器的ListView事先分配好了item,只需去調用既可。
  (2)初始化ArrayAdapter及數據集。詳細功能見代碼中註釋

package com.example.day0926listview;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {

    private ListView listView;
    String[] dataArr = new String[15]; //創建數據集

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

    private void initView(){
        listView = (ListView)findViewById(R.id.list);
        //ArrayAdapter適配器在初始化時需傳入3個參數:①上下文對象 ②列表條目的item ③數據集
        ArrayAdapter<String>arrayAdapter =
                new ArrayAdapter<String>(this,android.R.layout.     //上下文對象傳入的是當前對象
                        simple_expandable_list_item_1,dataArr);             //傳入item是系統自帶,需android.R.layout.simple_expandable_list_item_1獲取
                                                                            //數據集數組dataArr(必須數組類型)
        listView.setAdapter(arrayAdapter);
    }

    private void initData(){	//對數據集賦值
        for (int i=0;i<15;i++){
            dataArr[i] = "第"+i+"個item";
        }
    }
}

運行結果:

在這裏插入圖片描述

2.SimpleAdapter適配器實現Listview


  SimpleAdapte來實現ListView有一定的擴充性,可以實現一定的自定義效果,這種效果是通過創建item樣式來實現的。
  
  (1)創建一個名爲item_list.xml的item佈局文件:

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

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/item_draw"
        android:layout_weight="1"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/item_text"
        android:layout_weight="1"
        android:textSize="24sp"/>

</LinearLayout>

上述佈局文件用來展示一個圖像和一行文字。
  (2)在上個例子中ListView加入Activity對應佈局文件中代碼無需改變,在Activity中將ArrayAdapter改爲SimpleAdapter,同時修改數據集等:

package com.example.day0926listview;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ArrayAdapter;
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 {

    private ListView listView;
    private List<Map<String,Object>> dataList = new ArrayList<Map<String,Object>>();
    private int[] itemIdArr = new int[]{R.id.item_text,R.id.item_draw};
    private String[] dataKeyArr = new String[]{"name","draw"};

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

    private void initView(){
        listView = (ListView)findViewById(R.id.list);
         
        SimpleAdapter simpleAdapter =
                new SimpleAdapter(this,dataList,R.layout.item_list,dataKeyArr,itemIdArr);             
                                                                          
        listView.setAdapter(simpleAdapter);
    }

    private void initData(){
        Map<String,Object> map;
        for (int i=0;i<15;i++){
            map = new HashMap<String,Object>();
            map.put("name","第"+i+"個item");
            map.put("draw",R.drawable.cry);
            dataList.add(map);
        }
    }
}

運行結果:

在這裏插入圖片描述
Java沒學好,Android也涼涼,(流下了不學無術的眼淚)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章