《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也凉凉,(流下了不学无术的眼泪)