ArrayAdapter与SimpleAdapter的使用

在使用ListView中我们使用到adapter,android中为我们不仅提供了BaseAdapter类来让我们自定义自己的Adapter,还为我们提供了ArrayAdapter以及SimpleAdapter。现在让我们简述一下,这两个类的使用方法。

package xidian.dy.com.chujia;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;



public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView lv = (ListView) findViewById(R.id.lv);
        String[] str = new String[]{"fdfas", "fdsf", "fafda"};
        if(lv != null)
            lv.setAdapter(new ArrayAdapter<String>(this, R.layout.item_list, R.id.dog, str));
    }
}

 ArrayAdapter第一个参数是上下文,一般都是this来指定当前的activity,第二个参数是子布局文件,将来要放到ListView中,第三个是子布局文件中需要填充的对象ID,第四个是填充的值,类型为数组。先看一下子布局文件。

  • item_list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    tools:context="xidian.dy.com.chujia.MainActivity">

    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:src="@drawable/dog"
        />
    <TextView
        android:id="@+id/dog"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="小狗"
        android:textSize="30sp"
        android:layout_gravity="center_vertical"
        />
</LinearLayout>

R.id.dog就是子布局文件中的TextView的id,ArrayAdapter没生成一个子布局对象后,会从str中取一个值出来,将其填充到TextView中。然后将生成的View对象交给ListView来显示。ArrayAdapter只能处理一种数据类型,这里的泛型指定的是String类,所以其第四个参数只能传入String数组。

SimpleAdapter


SimpleAdaptern能够处理多种数据,其用法和ArrayAdapter很相似。

package xidian.dy.com.chujia;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
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 {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView lv = (ListView) findViewById(R.id.lv);
        List<Map<String, Object>> data = new ArrayList<>();
        Map<String, Object> m1 = new HashMap<>();
        m1.put("phone", R.drawable.dog);
        m1.put("name", "one");
        data.add(m1);

        Map<String, Object> m2 = new HashMap<>();
        m2.put("phone", R.drawable.dog1);
        m2.put("name", "two");
        data.add(m2);

        Map<String, Object> m3 = new HashMap<>();
        m3.put("phone", R.drawable.dog2);
        m3.put("name", "three");
        data.add(m3);
        if(lv != null)
           lv.setAdapter(new SimpleAdapter(this, data, R.layout.item_list, new String[]{"phone", "name"}, new int[]{R.id.phone, R.id.name}));
    }
}

布局文件中有一个ImageView和一个TextView,我们一张图和一个字符串放到一个Map中,然后将多个Map放到一个List中。将List传递给SimpleAdapter。第三个参数和第四个参数的含义是,从Map中取出phone放到布局中的R.id.phone中,将name放到R.id.name中。

原文地址:https://www.cnblogs.com/xidongyu/p/5601706.html