在写适配器时,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,显示的内容也有图片
原文:https://www.cnblogs.com/z-cg/p/12289340.html