Android学习之listView显示下拉列表(2)(SimpleAdapter适配器)

                     ListView显示下拉列表(2)(SimpleAdapter适配器)

上一篇文章我大概介绍了listView的主要功能以及用ArrayAdapter数组适配器实现纯文本的下拉列表。但是在现实生活中,纯文本的使用率不是很高,更多的是用SimpleAdapter实现图文并茂的下拉列表,这种机制就和美团app和淘宝app的下拉列表一样了,但是SimpleAdapter相对比较复杂,下面我来一一介绍。
1.首先和ArrayAdapter一样,要新建一个适配器。

<span style="background-color: rgb(255, 255, 255); font-family: 'Microsoft YaHei'; font-size: 14px;">我们先声明它:private  SimpleAdapter sim_adapter;</span>

接着就是新建它,这里要详细介绍一下SimpleAdapter的几个参数(content,data,resource,from,to):

content:和ArrayAdapter的一样指的是上下文,我们就用我们的这个activity,所以用this.

data:是一个泛型数据源(学过java应该知道什么是泛型编程吧)一个map所组成的list集合
            每一个map都会去对应ListView列表中的每一行
            每一个map(键-值对)中的键必须包含在所有的from(下面有这个参数)中所指定的键

resource:列表布局文件的ID,就是你自己的xml文件(和ArrayAdapter不同,ArrayAdapter是用android自带的布局)

from:map中的键名

 to:绑定数据视图中的ID,与from成对应关系

2..新建一个数据源,private List<Map<String,Object>>dataList;dataList=new ArrayList<Map<String,Object>>();

这里我们用一个函数去新建这个数据源 

<span style="font-size:18px;"><strong> private  List<Map<String,Object>>  getdata(){
        for (int i=0;i<20;i++){
            Map<String,Object>map=new HashMap<String,Object>();
            map.put("pic",R.drawable.ic_launcher);
            map.put("text","zhangxiang"+i);
            dataList.add(map);

        }


        return dataList;

    }</strong></span>
我们循环插入20行,每一行都是一个hashmap,接着把我们在xml中的图片的id和文本的id放进put中的第一个参数里面,图片的第二个参数我们用自带的图片
<span style="font-family:Microsoft YaHei;font-size:14px;">R.drawable.ic_launcher(小机器人),文本中的第二个参数我们随便写后面再加上一个i以便与区分,最后将map加入到dataList当中。</span>
3.关于from与to参数,我先把xml的源码附上以便解释(即R.layout.item)

<span style="font-size:18px;"><strong><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:id="@+id/pic"
        android:layout_marginLeft="20dp"
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:src="@drawable/ic_launcher"/>
    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:textSize="20sp"
        android:text="机器人"
        android:paddingTop="40dp"
        android:textColor="#ff450a0a"
        />
</LinearLayout></strong></span>

然后我们为from这个参数赋值new String[]{"pic","text"},为了便于对应键名就叫做pic与text

接着是to赋值new int []{R.id.pic,R.id.text},pic和text即你在xml中图片与文本的id

最后新建的适配器就是这样的sim_adapter=new SimpleAdapter(this,getdata(),R.layout.item,new String[]{"pic","text"},new int []{R.id.pic,R.id.text});

然后 视图加载适配器即可:lv.setAdapter(sim_adapter);

整个activity中的源码奉上:

<span style="font-size:18px;"><strong>package xiang24.zhang.myapplicationnew;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;

import javax.xml.datatype.Duration;


public class MainActivity extends Activity {
    private ListView lv;//下拉列表
    private SimpleAdapter sim_adapter;
    private List<Map<String,Object>>dataList;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv=(ListView)findViewById(R.id.listView);
        //1.新建一个适配器,新建数据源
        //ArrayAdapter(上下文,当前listView中加载的每一个列表项所对应的布局文件,数据源)
        //SimpleAdapter(content,data,resource,from,to)
        /*content:上下文,
          data:泛型数据源,一个map所组成的list集合
            每一个map都会去对应ListView列表中的每一行
            每一个map(键-值对)中的键必须包含在所有的from中所指定的键
          resource:列表项布局文件的ID
          from:map中的键名
          to:绑定数据视图中的ID,与from成对应关系


         */
        /*
        2.适配器加载数据源
        3.视图加载适配器
         */
          
          dataList=new ArrayList<Map<String,Object>>();
          sim_adapter=new SimpleAdapter(this,getdata(),R.layout.item,new String[]{"pic","text"},new int []{R.id.pic,R.id.text});
          lv.setAdapter(sim_adapter);
      

    }

    private  List<Map<String,Object>>  getdata(){
        for (int i=0;i<20;i++){
            Map<String,Object>map=new HashMap<String,Object>();
            map.put("pic",R.drawable.ic_launcher);
            map.put("text","zhangxiang"+i);
            dataList.add(map);

        }


        return dataList;

    }

}
</strong></span>

最后实现的效果如图所示:如果下拉列表会显示剩余数据(注意这里出现的文字是zhangxiang+i,而不是我们在xml中定义的text的值)。
<img src="https://img-blog.csdn.net/20141214011032953?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hpZWZfSVRfb3BlcmF0ZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" align="left" width="250" height="350" style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);" alt="" />

                                                                                 

注:感谢观看,如果有喜欢android编程的同学可以加我qq805198265,大家一块学习进步啊吐舌头


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值