概述
SimpleAdapter简单数组适配器:
- 父类: BaseAdapter
- 方法: SimpleAdapter
声明
public SimpleAdapter(Context context,
List<? extends Map<String,?>> data,
@LayoutRes int resource,
String[] from,
@IdRes int[] to)
参数解释
- context 上下文,即当前的Activity
List<? extends Map<String,?>> data
一个嵌套Map集合类型的list集合数据源
@LayoutRes int resource 你设定的一个布局中必须包括了to中定义的控件id,可以直接使用系统给的布局
String[] from 一个String数组,要求是一个K值的字符串数组,具体的后面会讲到
@IdRes int[] to 一个与K值匹配的的控件对象
与ArrayAdapter的区别
Sadapter可以展示混合数据值类型,而Aadapter只能展示单个数据类型。
能展示混合数据类型意味着,需要设定对应类型的控件。那么如何对不同数据类型进行区分呢?假如能够根据他的名称就能判断什么类型就行了? 所以我们需要一个Map集合。
利用Map存值的特点,可以进行一个数据区分。
Map <K、V>
源代码
MainActivity
package com.example.administrator.listview;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.SimpleAdapter;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//设置3个按钮
Button btnArray, btnSimple, btnBase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到xml中的按钮
btnArray = ((Button) findViewById(R.id.array_adapter));
btnSimple = ((Button) findViewById(R.id.simple_adapter));
btnBase = ((Button) findViewById(R.id.base_adapter));
//设置监听事件
btnArray.setOnClickListener(this);
btnSimple.setOnClickListener(this);
btnBase.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
//按下第一个按钮的情况
case R.id.array_adapter:
Intent intent = new Intent(this, ArrayActivity.class);
startActivity(intent);
break;
//按下第二个按钮的情况
case R.id.simple_adapter:
Intent simpleIntent = new Intent(this,SimpleActivity.class);
startActivity(simpleIntent);
break;
}
}
}
SimpleActivity
package com.example.administrator.listview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.SmsManager;
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 SimpleActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple);
ListView listView = ((ListView) findViewById(R.id.listview));
//SimpleAdapter的数据源
//一个里边是Map类型的List,这个List变量就是data
//最后传给SimpleAdapter的也就是data
List<Map<String, String>> data = new ArrayList<>();
HashMap<String, String> map;
map = new HashMap<>();
map.put("name", "john");
map.put("age", "21");
data.add(map);
map = new HashMap<>();
map.put("name", "laowang");
map.put("age", "22");
data.add(map);
map = new HashMap<>();
map.put("name", "zz");
map.put("age", "20");
data.add(map);
//使用系统内置的布局simple_expandable_list_item_2,注意引用前加上android
//布局中有两个TextView,即text1和text2
SimpleAdapter simpleAdapter = new SimpleAdapter(this, data, android.R.layout.simple_expandable_list_item_2,
new String[]{"name", "age"}, new int[]{android.R.id.text1, android.R.id.text2});
//后面两个参数的含义是:
//String表示把哪个字段绑定到那个View上
//比如把"name"字段绑定到text1这个View上
//这样就可以通过这个Adapter把布局和数据对应起来了
listView.setAdapter(simpleAdapter);
}
}
activity_simple
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.administrator.listview.SimpleActivity">
</ListView>