LsitView使用(二)SimpleAdapter

SimpleAdapter

  • 简单数组适配器,必须自定义选项item布局
  • 父类:BaseAdapter

SimpleAdapter的参数说明:

  • Context context:上下文(当前的Activity)
  • List<? extends Map<String, ?>> data:一个嵌套Map集合类型的list集合数据源
  • int resource:这个是你设定用于接收Map-Object类型的Activity,这个布局中必须包括了to中定义的控件id
  • String[] from:第四个参数通过源码可以看出需要的是一个K值的字符串数组,
  • int[] to:第五个参数通过源码看出是一个与K值匹配的的控件对象

    activity_main布局

    1
    2
    3
    4
    5
    6
    7
    8
    <ListView
    android:id="@+id/list_item"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

adapter适配器布局

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@mipmap/ic_launcher" />

<TextView

android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

android:layout_marginEnd="88dp"
android:layout_marginTop="28dp"
android:text="TextView"
android:textColorLink="@color/colorAccent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.626"
app:layout_constraintStart_toEndOf="@+id/imageView"
app:layout_constraintTop_toTopOf="parent" />

activity代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class MainActivity extends AppCompatActivity {
public ListView listView;
//使用HashMap来存储显示的数据
private List<Map<String,Object>> list_map = new ArraryList<Map<String,Object>>;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.list_item);

for(int i = 0;i < 20;i++){
HashMap<String,OBject> map = new HashMap<String,Object>;
map.put("name",i+"");
map.put("pic",R.mipmap.ic_launcher);
list_map.add(map);
}

SimpleAdapter simpleadapter = new SimpleAdapter(
MainActivity.this,
list_map,
R.layout.adapter,
new String[]{"name","pic"},
new int[]{R.id.textView,R.id.imageView});
listView.setAdapter(simpleAdapter);

}
}

SimpleAdapter解析思路与案例:

1
2
3
4
5
6
分析:SimpleAdapter与ArrayAdapter区别,Sadapter可以展示混合数据值类型,而Aadapter只能展示单个数据类型,能展示混合数据类型那么
意味着,需要设定对应类型的控件,而怎么对不同数据类型进行区分 假如能够根据他的名称就能判断什么类型就行了? 所以我们需要一个Map集合
利用Map <K、V>存值的特点,从而进行一个数据区分
思路:1.设定一个布局文件添加对应控件并赋ID,创建一个用嵌套Map集合的List集合
2.创建一适配器
3.添加数据源,赋值适配器,最后由控件绑定适配器,完成!