前言:

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

正文:

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

来直接上代码

在主活动中添加

 <ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent">

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

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

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/date"
android:text="数据"
android:textSize="10sp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/intro"
android:text="简介"
android:textSize="20sp"/> </LinearLayout>

接下来是Java代码:

 package com.example.administrator.testsimpleadapter;

 import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects; public class MainActivity extends AppCompatActivity {
private ListView listview;
private SimpleAdapter adapter;
private List<Map<String,Object>>list;
private Map<String,Object>map;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化View
listview=(ListView)findViewById(R.id.listview);
//初始化数据
list=new ArrayList<Map<String,Object>>();
for (int i=0;i<=40;i++){
map=new HashMap<String,Object>();
map.put("数据","数据为"+i);
map.put("简介","简介为"+i);
list.add(map);
}
//初始化适配器
String[]form={"数据","简介"};
int[]to={R.id.date,R.id.intro};
adapter=new SimpleAdapter(MainActivity.this,list,R.layout.simple_item,form,to);
listview.setAdapter(adapter);
}
}

初始化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

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView
android:padding="4dp"
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/img"
android:src="@drawable/qq"
android:scaleType="fitXY"/>
<TextView
android:padding="4dp"
android:layout_marginLeft="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/name"
android:text="名字"
android:layout_toRightOf="@id/img"
android:textSize="20sp"
/>
<TextView
android:id="@+id/intro"
android:padding="4dp"
android:layout_marginLeft="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="简介"
android:textSize="22sp"
android:layout_toRightOf="@id/img" android:layout_alignBottom="@id/img"
android:layout_alignLeft="@id/name"/>
</RelativeLayout>

接下来是Java代码

 import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
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;
int[]imag={R.drawable.qq};
String[]name={"聊天"};
private List<Map<String,Object>>list;
private Map<String,Object>map;
private SimpleAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化适配器view
listview=(ListView)findViewById(R.id.listview);
//初始化数据源
list=new ArrayList<Map<String,Object>>();
for (int i=0;i<name.length;i++){
map=new HashMap<String,Object>();
map.put("img",imag[i]);
map.put("name",name[i]);
map.put("intro","这是款不错的"+name[i]+"软件");
list.add(map);
}
String[]form={"img","name","intro"};
int []to={R.id.img,R.id.name,R.id.intro};
//设置适配器
adapter=new SimpleAdapter(MainActivity.this,list,R.layout.pic_item,form,to);
listview.setAdapter(adapter);
}
}

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

适配器之SimpleAdapter的更多相关文章

  1. C++STL模板库适配器之优先级队列

    目录 适配器之优先级队列 一丶优先级队列简介(priority_queue) 二丶优先级队列代码演示 1.优先级队列代码以及使用简介 适配器之优先级队列 一丶优先级队列简介(priority_queu ...

  2. C++STL模板库适配器之queue队列

    目录 适配器之队列 一丶队列简介 二丶队列(queue)代码操作 1.常用方法 适配器之队列 一丶队列简介 队列是先进先出的数据结构. 在STL中使用 queue表示. 底层使用的是序列容器deque ...

  3. Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段(转)

    摘自:http://blog.csdn.net/shakespeare001/article/details/7926783 Adapter是连接后端数据和前端显示的适配器接口,是数据Data和UI( ...

  4. [转]Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段

      收藏ArrayAdapter.SimpleAdapter和BaseAdapter的一些简短代码片段,希望用时方便想起其用法. 1.ArrayAdapter 只可以简单的显示一行文本 代码片段: A ...

  5. 函数对象适配器之ptr_fun的使用示例

    //============================================================================ // Name : CopyInts4.c ...

  6. 容器适配器之priority_queue

    template <class T, class Container = vector<T>,                class Compare = less<type ...

  7. 容器适配器之stack

    参见http://www.cplusplus.com/reference/stack/stack/ template<class T, class Container = deque<T& ...

  8. 容器适配器之queue

    转载http://blog.csdn.net/thefutureisour/article/details/7751846容器适配器容器适配器其实就是一个接口转换装置,使得我们能用特定的方法去操作一些 ...

  9. C++STL模板库适配器之stack容器

    目录 适配器 一丶适配器简介 二丶栈(stack)用法 1.栈的常用方法 适配器 一丶适配器简介 Stl中的适配器,有栈 (stack) 队列 queue 根priority_queue 适配器都是包 ...

随机推荐

  1. Nacos client 客户端cpu占用100% 问题排查和解决方案

    Nacos version:1.1.3client version:1.0.0 dependency: 'org.springframework.cloud:spring-cloud-alibaba- ...

  2. 安卓手机的屏幕规格很多。app开发者在设计User Interface的时候,要怎么处理,才能适应不同屏幕大小?

    在app store下载应用时经常看到:此App已针对iPhone 5 进行优化.可是Android手机屏幕规格这么多,相差这么远.难道要针对每个尺寸都进行一次优化吗?(题主非专业人士,看到2014年 ...

  3. 微擎系统BUG漏洞解决方法汇总

    微擎微赞系统BUG漏洞解决方法汇总 弄了微擎系统来玩玩,发觉这个系统BUG还不少,阿里云的提醒都一大堆,主要是没有针对SQL注入做预防,处理的办法基本都是用转义函数. 汇总: 1. 漏洞名称: 微擎任 ...

  4. List模拟栈

    import java.util.LinkedList; import java.util.List; import java.util.Scanner; public class Main<E ...

  5. 「NOI2005」维护数列

    「NOI2005」维护数列 传送门 维护过程有点像线段树. 但我们知道线段树的节点并不是实际节点,而平衡树的节点是实际节点. 所以在向上合并信息时要加入根节点信息. 然后节点再删除后编号要回退(栈), ...

  6. Vuex踩坑--数据刷新时丢失

    近期做项目的过程中,使用vuex保存页面公共数据,测试无网情况后又接通网络的情况下,页面进行重新加载.遇到一个小bug——发现在苹果手机IOS系统下,页面刷新重新加载后页面中通过vuex存储并显示的数 ...

  7. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:制作一个小按钮

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 表单:表单控件大小

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. importlib 与__import__的区别

    importlib 与__import__的区别 importlib import importlib name = "lib.test" # lib.test指的是lib路劲下的 ...

  10. 自定义autograd

    这个操作博主认为应该是判断其requires_grad是否为True,从而判断是否进行梯度的运算但是至于这个为啥这么写,博主也不是很清楚 device = torch.device('cuda' if ...