首先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>