1. 高级控件与低级控件区别
是否使用适配器
2. 适配器种类和作用
2.1 种类
数组适配器 ArrayAdapter
new ArrayAdapter<String>(this,R.layout.actv_style, names);
简单适配器 SimpleAdapter
也叫“并不简单的简单适配器”^_^
自定义适配器
2.2 作用
桥梁
展示
3. 高级控件使用步骤
3.1 获取数据
3.2 创建适配器
3.3 绑定适配器
4. 自动提示文本框
4.1 AutoCompleteTextView(单一提示)
android:completionThreshold="1"
4.2 MultiAutoCompleteTextView(多次提示)
//设置多次提示时,设置分隔符方法
Tokenizer t = new MultiAutoCompleteTextView.CommaTokenizer();
mactv_main.setTokenizer(t);
4.3 两种自动提示文本框的异同
AutoCompleteTextView:支持基本的自动完成功能,适用在各种搜索功能中,并且可以根据自己的需求设置他的默认显示数据
MultiAutoCompleteTextView: 可支持选择多个值(在多次输入的情况下),分别用分隔符分开,并且在每个值选中的时候再次输入值时会自动去匹配。
可用在发短信,发邮件时选择联系人这种类型当中。
5. 下拉框
Spinner
素材
String[] names = { "愤怒的小鸟", "汤姆猫", "落汤鸡", "牛牛", "哈巴狗", "神龙", "烤鸭",
"小象", "美人鱼", "九尾狐" };
int[] images = { R.drawable.bird, R.drawable.cat, R.drawable.chicken,
R.drawable.cow, R.drawable.dog, R.drawable.dragon,
R.drawable.duck, R.drawable.elephant, R.drawable.fish,
R.drawable.fox };
事件监听
AdapterView.OnItemSelectedListener
核心:
1、数组适配器
String[] AutoCompleteTextView 项资源
List<Dept> Spinner 项资源
2、获取下拉框的值
3、简单适配器
List<Map> 项资源
package com.example.t212_a06;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.SimpleAdapter;
import android.widget.Spinner;
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 {
private String[] data1;
//声明一个适配器
private ArrayAdapter<String> adapter1;
private AutoCompleteTextView act_main_act1;
private List<Option> data2;
private ArrayAdapter<Option> adapter2;
private Spinner sp_main_sp1;
private List<Map<String,Object>> data3;
private SimpleAdapter adapter3;
private Spinner sp_main_sp2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
act_main_act1 = this.findViewById(R.id.act_main_act1);
sp_main_sp1 = this.findViewById(R.id.sp_main_sp1);
sp_main_sp2 = this.findViewById(R.id.sp_main_sp2);
// 3.1 获取数据 httpclient (输入前两个字或者以上将会提示)
data1 = new String[]{ "愤怒的小鸟","愤怒的fpp", "汤姆猫", "落汤鸡", "牛牛", "哈巴狗", "神龙", "烤鸭","小象", "美人鱼", "九尾狐" };
// 3.2 创建适配器
//上下文参数 , 项资源文件 , 要展示的数据 (三个参数)
//通过上下文参数把当前的项资源文件解析成一个视图并且把数据绑定到视图里面
adapter1 = new ArrayAdapter<String>(this,R.layout.act_main_item1,data1);
// 3.3 绑定适配器
act_main_act1.setAdapter(adapter1);
data2 = loadData2();
adapter2 = new ArrayAdapter<Option>(this,R.layout.act_main_item1,data2);
sp_main_sp1.setAdapter(adapter2);
//设置下拉框选中的监听事件
sp_main_sp1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
//下拉框选中时调用的方法
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
//获取被选中的项
Option selectedItem = (Option) parent.getSelectedItem();
//在界面上弹出
Toast.makeText(MainActivity.this, selectedItem.getHtml(), Toast.LENGTH_SHORT).show();
}
//没选中时调用的方法
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
data3 = loadData3();
//参数 : 上下文参数 , 对应的项资源文件 , Map集合的键的List集合 , 要展示的控件的id的List集合
// Map 集合的键 顺序要与 控件id对应
adapter3 = new SimpleAdapter(this,data3,R.layout.sp_main_item2,new String[]{"name","image"},new int[]{R.id.tv_main_tv1,R.id.iv_main_item_iv1});
sp_main_sp2.setAdapter(adapter3);
}
private List<Map<String,Object>> loadData3() {
List<Book> list = new BookDAO().list();
List<Map<String,Object>> mapList = new ArrayList<>();
Map<String,Object> map = null;
for (Book book:list){
map = new HashMap<>();
map.put("name",book.getName());
map.put("image",book.getImage());
mapList.add(map);
}
return mapList;
}
private List<Option> loadData2() {
List<Book> list = new BookDAO().list();
List<Option> list1 = new ArrayList<Option>();
for(Book book : list){
list1.add(new Option(book.getId().toString(),book.getName()));
}
return list1;
}
}