1、AutoCompleteTextView
适配器:adapter
数据资源与控件关联需要适配器(ArrayAdater,SimpleAdapter,BaseAdapter)
获取字符串数组资源并返回数组
String[] data = getResources().getStringArray(R.array.country);
// 1.上下文,this
// 2.布局,自定义布局(根标签为TextView),R.layout.item
// 3、数据源(数组,或集合)
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, data);
使用资源文件创建适配器
// 1.上下文,this
// 2.数组资源的id,R.array.country
// 3.布局文件
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.country, android.R.layout.simple_list_item_1);
2、Spinner,下拉列表
Spinner 注册监听器:OnItemSelectedListener
重写OnItemSelected方法,方法参数说明:
// parent:代表Spinner控件
// view:Spinner的每一个列表项
// position:位置,数据在适配器的位置
// id:被选择行的id
在该方法中,使用以下方式获得选中的项目
String s = parent.getItemAtPosition(position).toString();
s = parent.getSelectedItem().toString();
s = adapter.getItem(position).toString();
3、解析xml文件,将xml文件放置到res/xml下
4、刷新适配器:当适配器关联的数据源改变时,应该调用该方法,刷新适配器,可以实现动态刷新列表的功能
adapter.notifyDataSetChanged();
5、DatePicker
DatePickerDialog
一级联动案例:解析xml文件,放置到spinner中
public class MainActivity extends Activity {
// 数据源
private String[] provinces = { "北京", "吉林", "四川" };
private String[][] cities = { { "海淀", "昌平", "朝阳" }, { "长春", "通化", "白城" },
{ "成都", "汶川", "绵阳" } };
private Spinner mProvince, mCity;
private ArrayAdapter<String> adapterProvice, adapterCity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mProvince = (Spinner) findViewById(R.id.mSpinnerProvince);
mCity = (Spinner) findViewById(R.id.mSpinnerCity);
// 创建适配器
adapterProvice = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line, provinces);
// 二级Spinner的数据资源未确定,所以创建适配器无须指定数据源
adapterCity = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line);
// 给Spinner设置适配器
mProvince.setAdapter(adapterProvice);
mCity.setAdapter(adapterCity);
// 省份Spinner注册监听器
mProvince.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
// 清空原有数据
adapterCity.clear();
// 给适配器添加数据
adapterCity.addAll(cities[position]);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
});
}
}
三级联动案例:
public class MainActivity extends Activity {
private Spinner proSpi, citySpi, districSpi;
private ArrayAdapter<String> proAdapter, cityAdapter, districAdapter;
private List<String> pIdList, pNameList, cIdList, cNameList, dNameList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
proSpi = (Spinner) findViewById(R.id.spinPro);
citySpi = (Spinner) findViewById(R.id.spinCity);
districSpi = (Spinner) findViewById(R.id.spinDistrict);
getProvice();
proAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line, pNameList);
cityAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line);
districAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line);
proSpi.setAdapter(proAdapter);
citySpi.setAdapter(cityAdapter);
districSpi.setAdapter(districAdapter);
proSpi.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
String pId = pIdList.get(position);
getCity(pId);
cityAdapter.clear();
cityAdapter.addAll(cNameList);
//在城市改变了之后,区也要改变
getDistrict(cIdList.get(0));
districAdapter.clear();
districAdapter.addAll(dNameList);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
citySpi.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
String cId = cIdList.get(position);
getDistrict(cId);
districAdapter.clear();
districAdapter.addAll(dNameList);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
public void getProvice() {
XmlResourceParser parser = getResources().getXml(R.xml.cities);
int type;
try {
type = parser.getEventType();
while (type != 1) {
String tag = parser.getName();
switch (type) {
case 0:
pIdList = new ArrayList<String>();
pNameList = new ArrayList<String>();
break;
case 2:
if ("p".equals(tag)) {
String id = parser.getAttributeValue(0);
pIdList.add(id);
}
if ("pn".equals(tag)) {
pNameList.add(parser.nextText());
}
break;
}
type = parser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void getCity(String pId) {
XmlResourceParser parser = getResources().getXml(R.xml.cities);
int type;
try {
type = parser.getEventType();
while (type != 1) {
String tag = parser.getName();
switch (type) {
case 0:
cIdList = new ArrayList<String>();
cNameList = new ArrayList<String>();
break;
case 2:
if ("c".equals(tag)) {
String id = parser.getAttributeValue(0);
if (id.startsWith(pId)) {
cIdList.add(id);
parser.nextTag();//要在c还没有执行完的时候就获取下一个标签中的文本
cNameList.add(parser.nextText());
}
}
break;
}
type = parser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void getDistrict(String cId) {
XmlResourceParser parser = getResources().getXml(R.xml.cities);
int type;
try {
type = parser.getEventType();
while (type != 1) {
String tag = parser.getName();
switch (type) {
case 0:
dNameList = new ArrayList<String>();
break;
case 2:
if ("d".equals(tag)) {
String did = parser.getAttributeValue(0);
if("0101".equals(cId)||"0201".equals(cId)||"0301".equals(cId)||"0401".equals(cId)){
if(cId.substring(0,2).equals(did.substring(3, 5))){
dNameList.add(parser.nextText());
}
}else{
if(did.substring(3).startsWith(cId)){
dNameList.add(parser.nextText());
}
}
}
break;
}
type = parser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}