在使用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中。