Android 中关于SimpleAdapter的一些见解

本文详细介绍了Android中的SimpleAdapter,包括其特点、使用场景及如何创建。通过实例展示了如何利用SimpleAdapter结合ListView显示复杂列表项。


首先SimpleAdapter是一个Adapter的一个实现类,关于Adapter,大家可以理解为是一个接口。Adapter派生的两个主要的子接口就是 ListAdapter 和 SpinnerAdapter 。 这里不聊其他的。 关于SimpleAdapter 这玩意是 **并不简单、功能强大,可用于将List集合的多个对象包装成多个列表项。** 当然这个说法是官方的哈。


这个SimpleAdapter 的兄弟ArrayAdapter是我们用的比较多的,但是这个玩意局限性很大,它只能使用TextView的控件,如果开发组需要一个复杂的列表项,这个SimpleAdapter 就很好用了。


SimpleAdapter 最大的难度在于创建,一共需要五个参数。在Android API在线文档上的解释是这样的:

SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource,String[] from, int[] to)


第一个参数:需要一个Acivity对象,一般都是用当前的Activity

第二个参数:是一个 List<? extends Map<String, ?>>类型的集合对象,该几个中每个 Map<String, ?>对象生成一个列表项。

第三个参数:该成熟指定一个布局的id。 在layout中的xml文件,后面会有代码。

第四个参数:String[]类型,这个参数决定提取 Map<String, ?>对象中哪些key对应的value来生成列表项。

第五个参数:是一个int[]类型的参数,该参数决定填充哪些组件。

首先是一个activity_main.xml的布局文件,没有什么问题都是基础的

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    tools:context="com.example.administrator.simpleadapter.MainActivity">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/listView"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true" />
</RelativeLayout>


在Mainaictivity中的关键代码:

package com.example.administrator.simpleadapter;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {
    /**
     *
     * 创建两个数组,来存放TextView和id内容
     */
    private String names[] = new String[]{
            "cat", "dog", "elephant", "lion", "monkey", "tiger"
    };
    private int[] imagesList = new int[]{
        R.drawable.cat, R.drawable.dog, R.drawable.elephant,
            R.drawable.lion, R.drawable.monkey, R.drawable.tiger
    };
    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /**
         * 创建一个LIST集合,该集合的元素是Map
         */
        List<Map<String, Object>> listitem =
                new ArrayList<Map<String, Object>>();

        for (int i = 0; i < names.length; i++) {
            Map<String, Object> lists = new HashMap<String, Object>();
            lists.put("textView", names[i]);
            lists.put("imageView", imagesList[i]);
            listitem.add(lists);
        }

        /**
         * 创建一个SimpleAdapter 这里使用到的参数和之前API中的参数对应
         */
        SimpleAdapter simpleAdapter = new SimpleAdapter(this, listitem,
                R.layout.simple_item,
                new String[]{"textView", "imageView"},
                new int[]{R.id.textView, R.id.imageView});

        /**
         * 这里为ListView设置SimpleAdapter
         */
        ListView listView = (ListView) findViewById(R.id.listView);
        listView.setAdapter(simpleAdapter);


        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(getApplicationContext(), "该控件被单击了", Toast.LENGTH_SHORT).show();
            }
        });
    }
}


最后是布局参数 simple_item.xml

<?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="wrap_content">


        <RelativeLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

                <TextView
                    android:layout_width="wrap_content"
                    android:textSize="30dp"
                    android:layout_height="90dp"
                    android:paddingTop="15dp"
                    android:text="New Text"
                    android:gravity="left"
                    android:id="@+id/textView" />

                <ImageView
                    android:layout_width="100dp"
                    android:layout_height="90dp"
                    android:scaleType="fitXY"
                    android:id="@+id/imageView"
                    android:layout_alignParentTop="true"
                    android:layout_alignParentEnd="true" />



        </RelativeLayout>


</LinearLayout>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值