①.AdapterView即Adapter控件,其内容通常是一个包含多项相同格式资源的列表,每次只显示其中的一项。②. 常用的AdapterView:
包括:ListVew(列表)、Spinner(下拉列表)、GridView(网格图)
适配器:从数据源到UI组件(特指适配器视图AdapterView)的中介.负责把数据源填充到UI组件中,以便显示给用户.
1.ArrayAdapter:数组适配器. 是最简单的Adapter,适用于 列表项中只含有一条文本信息的情况;2.SimpleAdapter:比ArrayAdapter复杂,每一个列表项中可以含有不同的子控件;3.SimpleCursorAdapter:把从数据库查出的数据适配给AdapterView;4.自定义Adapter:完全自行定义数据的适配方式,灵活性最强,也最常用;5.其他的Adapter 采用MVC模式将前端显示V和后端数据M分离.
Control 控制器
View 视图
采用MVC模式将前端显示V和后端数据M分离.为AdapterView提供数据的List或数组等 数据源 相当于MVC模式中的M(数据模型Model)。Adapter对象相当于MVC模式中的C(控制器Controler)。MVC结构就是用C将M填充到V中去.
Spinner:下拉列表视图
父类:AbsSpinner->AdapterView
代码:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:entries="@array/province"
android:spinnerMode="dropdown">
dropdown:
dialog:
在Java代码中添加数据源:
列表视图 Spinner 的数据源是数组或者集合: 定义 数组或者List集合都可以
适配器:
ArrayAdapter:数组适配器
ArrayAdapter<String>adapter= new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item,list);
两个参数的构造方法:ArrayAdapter<String>adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item);
adapter.addAll(list); // 添加数据源
使用适配列表视图设置适配器:spinner.setAdapter(adapter);
adapter.add("呼伦贝尔大草原");
adapter.addAll(list);
移除数据:adapter.remove("乌兰察布");
刷新数据:当数据源发生改变后必须调用刷新方法来刷新适配器,否则视图将不会修改adapter.notifyDataSetChanged();
adapter = new ArrayAdapter<String>(this,R.layout.item_layout,list)
item_layout布局代码:xml version="1.0"encoding="utf-8"?>
android:textSize="20sp"
android:padding="10dp"
android:textColor="@color/colorAccent"
android:layout_width="match_parent"
android:layout_height="match_parent">
spinner.setOnItemSelectedListener(newAdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView> parent,View view,int position,long id) {
/*当选择的时候执行该方法
*记住参数三:position 位置 表示的是你选中的 条目的位置
* 根据position来 获取应该展示的数据
*/
city = list.get(position);
Toast.makeText(MainActivity.this, city, Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView> parent) {
//什么都没选 一般该方法不会执行
}
});
List<Map<String,Object>>list = new ArrayList<>();
for (int i= 0; i < 20; i++) {
Map<String,Object>map = new HashMap<>();
map.put("name","张三");
map.put("age","18");
map.put("pic",R.mipmap.ic_launcher);
map.put("isSingle",true);
list.add(map);
}
xml version="1.0"encoding="utf-8"?>
android:orientation="horizontal"android:layout_width="match_parent"
android:layout_height="match_parent">
android:textSize="20sp"
android:id="@+id/name_tv"
android:layout_margin="10dp"
android:layout_height="wrap_content"/>
android:textSize="20sp"
android:id="@+id/age_tv"
android:layout_margin="10dp"
android:layout_height="wrap_content"/>
android:layout_margin="10dp"
android:id="@+id/pic_iv"
android:layout_height="wrap_content"/>
android:textSize="20sp"
android:layout_margin="10dp"
android:id="@+id/isSingle_cb"
android:layout_height="wrap_content"/>
//数据源中Map中key 提取出来组成的集合
String[]keys = {"name","age","pic","isSingle"};
//条目布局中的id 的集合 用于展示上面的 key 对应的value
int[]ids = {R.id.name_tv,R.id.age_tv,R.id.pic_iv,R.id.isSingle_cb};
//适配器
SimpleAdapter adapter=new SimpleAdapter(this,list,R.layout.simple_item_layout,keys,ids);
spinner.setAdapter(adapter);
android:completionThreshold="1"
android:completionHint="请选择"
android:layout_height="wrap_content"/>
AutoCompleteTextView autoTv = (AutoCompleteTextView) findViewById(R.id.autoTv);
//设置适配器
autoTv.setAdapter(adapter);