android中常用的适配器有:ArrayAdapter、SimpleAdapter、SimpleCursorAdapter、BaseAdapter。注意:前3者都是继承于BaseAdapter。
ArrayAdapter:适用于简单文字列表。
SimpleAdapter:适用于图文混搭列表。
SimpleCursorAdapter:适用于数据源是数据库的列表。
BaseAdapter:最灵活的适配器,适用于大多数情况。
一般的适配器使用都需要:1.设置数据源
2.设置适配器
3.关联适配器
ArrayAdapter:
定义在string.xml中的数据源。
<resources>
<string name="app_name">ListviewDemo</string>
<string-array name="city">
<item>北京</item>
<item>上海</item>
<item>广州</item>
<item>深圳</item>
<item>四川</item>
<item>重庆</item>
</string-array>
</resources>
也可以直接在Java代码中定义:
lv=(ListView)findViewById(R.id.lv);
//准备数据源
final String[]city=getResources().getStringArray(R.array.city);
//将数据加载到适配器
adapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,city);
//将适配器中的数据加载到空控件中
lv.setAdapter(adapter);
效果图:
SimpleAdapter:
SimpleAdapter:在item中加上图文控件,添加图片资源到drawable中。
实例:
xml文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="114dp"
android:layout_height="103dp"
app:srcCompat="@drawable/ic_launcher1"
android:id="@+id/imageView" />
<TextView
android:text="TextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textView"
android:layout_weight="1"
android:layout_alignBottom="@+id/imageView"
android:layout_toRightOf="@+id/imageView"
android:layout_toEndOf="@+id/imageView"
android:layout_marginLeft="26dp"
android:layout_marginStart="26dp"
android:layout_marginBottom="36dp" />
</RelativeLayout>
Mainactivity:
package com.lee.simpleadapterdemo;
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 {
private ListView lv;
private List<Map<String,Object>> list;
private int images[]={R.drawable.ic_launcher1};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();//隐藏标题栏
setContentView(R.layout.activity_main);
lv= (ListView) findViewById(R.id.listview);
//准备数据源
list=new ArrayList<Map<String,Object>>();
for(int i=0;i<8;i++){
Map<String,Object> map = new HashMap<String,Object>();
map.put("img",images[0]);
map.put("text","item"+i);
list.add(map);
}
//将数据源加载到适配器:SimpleAdapter
/**
* SimpleAdapter(Context context, List<? extends Map<String, ?>> data,
@LayoutRes int resource, String[] from, @IdRes int[] to)
context表示上下文
data表示加载到适配器的数据源对象
resource表示adapter空间中的没想布局资源id
from表示数据源map中key的数组,key表示制定的数值
to表示需要展示对应数据的资源id
from→to表示将相应格式的资源展示到对应的控件中
*/
SimpleAdapter adapter=new SimpleAdapter(MainActivity.this,list,R.layout.list_item,
new String[]{"img","text"},
new int[]{R.id.imageView,R.id.textView});
//关联适配器
lv.setAdapter(adapter);
}
}
续。。。