《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也涼涼,(流下了不學無術的眼淚)