适配器之SimpleAdapter

前言:

在写适配器时,SimpleAdapter会经常使用到,虽然他比ArrayAdapter复杂,但是也提供了更多的功能

正文:

我们接下来先从SimpleAdapter中较为简单的显示两行文本开始讲解

来直接上代码

在主活动中添加

1 <ListView
2     android:id="@+id/listview"
3     android:layout_width="match_parent"
4     android:layout_height="match_parent">

我们在自己写一个布局文件

因为我们写的目的是显示两行文本,在上面显示数据,下面显示简介

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical" android:layout_width="match_parent"
 4     android:layout_height="match_parent">
 5     <TextView
 6         android:layout_width="match_parent"
 7         android:layout_height="wrap_content"
 8         android:id="@+id/date"
 9         android:text="数据"
10         android:textSize="10sp"/>
11     <TextView
12         android:layout_width="match_parent"
13         android:layout_height="wrap_content"
14         android:id="@+id/intro"
15         android:text="简介"
16         android:textSize="20sp"/>
17 
18 </LinearLayout>

接下来是Java代码:

 1 package com.example.administrator.testsimpleadapter;
 2 
 3 import android.support.v7.app.AppCompatActivity;
 4 import android.os.Bundle;
 5 import android.widget.Adapter;
 6 import android.widget.AdapterView;
 7 import android.widget.ListView;
 8 import android.widget.SimpleAdapter;
 9 
10 import java.util.ArrayList;
11 import java.util.HashMap;
12 import java.util.List;
13 import java.util.Map;
14 import java.util.Objects;
15 
16 public class MainActivity extends AppCompatActivity {
17     private ListView listview;
18     private SimpleAdapter adapter;
19     private List<Map<String,Object>>list;
20     private Map<String,Object>map;
21     @Override
22     protected void onCreate(Bundle savedInstanceState) {
23         super.onCreate(savedInstanceState);
24         setContentView(R.layout.activity_main);
25         //初始化View
26         listview=(ListView)findViewById(R.id.listview);
27         //初始化数据
28         list=new ArrayList<Map<String,Object>>();
29         for (int i=0;i<=40;i++){
30             map=new HashMap<String,Object>();
31             map.put("数据","数据为"+i);
32             map.put("简介","简介为"+i);
33             list.add(map);
34         }
35         //初始化适配器
36         String[]form={"数据","简介"};
37         int[]to={R.id.date,R.id.intro};
38         adapter=new SimpleAdapter(MainActivity.this,list,R.layout.simple_item,form,to);
39         listview.setAdapter(adapter);
40     }
41 }

初始化AdapterView

17行,26行,39行都是和AdapterView有关前两个是为了初始化AdapterView,最后一个是为了把Adapter添加到listview中显示

初始化数据源

接下来讲一下初始化数据,SimpleView使用的数据都是用Map<String,?>其键必须为String型,值可以为任意,所以在初始化list是都用到

private List<Map<String,Object>>list=new ArrayList<Map<String,Object>>();

初始化Adapter

接下来是初始化SimpleAdapter适配器,其参数一是上下文对象,参数二是数据源,参数三是布局资源,参数四为String型数组,其值为数据源中的键,参数四int型数组为布局文件中控件的id,与参数四对应,比如第一个控件显示参数四数组中的第一个键的值

下面介绍SimpleAdapter图文混排

因为是图文混排所以必须有显示图片和文字的地方,在layout中添加simple_item.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent" android:layout_height="match_parent">
 4 
 5     <ImageView
 6         android:padding="4dp"
 7         android:layout_width="100dp"
 8         android:layout_height="100dp"
 9         android:id="@+id/img"
10         android:src="@drawable/qq"
11         android:scaleType="fitXY"/>
12     <TextView
13         android:padding="4dp"
14         android:layout_marginLeft="5dp"
15         android:layout_width="wrap_content"
16         android:layout_height="wrap_content"
17         android:id="@+id/name"
18         android:text="名字"
19         android:layout_toRightOf="@id/img"
20         android:textSize="20sp"
21         />
22     <TextView
23         android:id="@+id/intro"
24         android:padding="4dp"
25         android:layout_marginLeft="5dp"
26         android:layout_width="wrap_content"
27         android:layout_height="wrap_content"
28         android:text="简介"
29         android:textSize="22sp"
30         android:layout_toRightOf="@id/img"
31 
32         android:layout_alignBottom="@id/img"
33         android:layout_alignLeft="@id/name"/>
34 </RelativeLayout>

接下来是Java代码

 1 import android.support.v7.app.AppCompatActivity;
 2 import android.os.Bundle;
 3 import android.widget.ListView;
 4 import android.widget.SimpleAdapter;
 5 
 6 import java.util.ArrayList;
 7 import java.util.HashMap;
 8 import java.util.List;
 9 import java.util.Map;
10 
11 public class MainActivity extends AppCompatActivity {
12     private ListView listview;
13     int[]imag={R.drawable.qq};
14     String[]name={"聊天"};
15     private List<Map<String,Object>>list;
16     private Map<String,Object>map;
17     private SimpleAdapter adapter;
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_main);
22         //初始化适配器view
23         listview=(ListView)findViewById(R.id.listview);
24         //初始化数据源
25         list=new ArrayList<Map<String,Object>>();
26         for (int i=0;i<name.length;i++){
27             map=new HashMap<String,Object>();
28             map.put("img",imag[i]);
29             map.put("name",name[i]);
30             map.put("intro","这是款不错的"+name[i]+"软件");
31             list.add(map);
32         }
33         String[]form={"img","name","intro"};
34         int []to={R.id.img,R.id.name,R.id.intro};
35         //设置适配器
36         adapter=new SimpleAdapter(MainActivity.this,list,R.layout.pic_item,form,to);
37         listview.setAdapter(adapter);
38     }
39 }

和上面的两行文字显示差不多,就是在第34行代码中另外加了ImageView的id,显示的内容也有图片

猜你喜欢

转载自www.cnblogs.com/z-cg/p/12289340.html