Spinner 下拉列表 ViewGroup -- AdapterView -- AbsSpinner -- Spinner
一, 属性:
android:spinnerMode = "" 下拉菜单的展示方式
属性值: dropdown 下拉方式(默认的)
dialog 对话框方式
如果下拉方式是dialog: 那么可以指定标题 android:prompt="@string/title" (只能引用,不能直接写文字)
android:entries="@array/books" 填充下拉菜单的内容
二, 填充方式
1, 属性填充 数据源不会经常发生变化时,使用该方式
step1: 数据源 在strings.xml中定义<string_array name="books"><item>三国演义</item>...</string_array>
step2: 在spinner控件中 通过属性填充: android:entries="@array_books"
2, 使用ArrayAdapter 来填充数据
适用场景 : Item 只有一个文本, 不能显示图片
数据源 : String[] / List<String>
步骤 :
适配器三个臭皮匠:
1, 控件, 得到控件并且初始化
2, 得到数据源
3, 得到适配器
第一种方式 数据源是String[] 三个参数 , 在这个Activity中有2个页面
/**
* context 上下文对象
* resource 每个Item的布局文件(文件中只能有一个TextView控件,没有布局和其他控件)
* objects 数据源
*/
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,
android.R.layout.simple_spinner_item,
data);
第二种方式 数据源是String[] 四个参数
/**
* context 上下文对象
* resource 每个Item的布局文件(可以有布局,但是必须有TextView控件)
* textViewResourceId 布局文件中的TextView的ID
* objects 数据源
*
*/
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,
R.layout.spinner_item_02,
R.id.tv,
data);
第三种方式 数据源List<String> 三个参数 在这个Activity中有2个页面
/**
* context 上下文对象
* resource 每个Item的布局文件(文件中只能有一个TextView控件,没有布局和其他控件)
* objects 数据源
*/
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,
android.R.layout.simple_spinner_item,
data);
第四种方式 数据源是List<String> 四个参数
/**
* context 上下文对象
* resource 每个Item的布局文件(可以有布局,但是必须有TextView控件)
* textViewResourceId 布局文件中的TextView的ID
* objects 数据源
*
*/
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,
R.layout.spinner_item_02,
R.id.tv,
data);
3, 使用SimpleAdapter 填充数据
适用场景 图文混排,图片来自本地
数据源 List<Map<String,Object>>
步骤:
1, 控件, 得到控件并且初始化
2, 得到数据源
3, 得到适配器
4, 为控件设置适配器
/**
* context 上下文对象
* data 数据源
* resource 每个Item的布局页面
* from String[] 数据源中key的数组
* to int[] 布局页面中id的数组
*/
SimpleAdapter adapter = new SimpleAdapter(
this,
data,
R.layout.spinner_item,
new String[]{"icon","name","age"},
new int[]{R.id.icon,R.id.name,R.id.age});
三, 监听器
onItemSelectedListener
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
/**
* AdapterView<?> parent 监听器的下拉列表对象
* View view 当前被选中的View
* int position 当前被选中条目的位置(从0开始)
* long id 当前被选中View的Id
*/
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// TODO 选中内容触发
//从数据源中获取当前点击的内容
String info = data.get(position);
//从parent中获取当前点击的内容
String info2 = parent.getItemAtPosition(position).toString();
//从spinner中获取当前点击的内容
String info3 = spinner.getItemAtPosition(position).toString();
//从adapter中获取当前点击的内容
String info4 = adapter.getItem(position);
Toast.makeText(ArrayAdapterActivity.this, "info="+info+",info2="+info2+",info3="+info3+",info4="+info4, Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO 如果数据源清空后, 调用适配器的刷新方法时, 执行此方法
}
});
四, AutoCompleteTextView 自动提示的编辑框 父类: EditText
比EditText多了自动提醒的功能
android:completionThreshold="1" 输入几个字符完成提示 默认情况下是输入两个字符
监听器: addTextChangedListener
一, 属性:
android:spinnerMode = "" 下拉菜单的展示方式
属性值: dropdown 下拉方式(默认的)
dialog 对话框方式
如果下拉方式是dialog: 那么可以指定标题 android:prompt="@string/title" (只能引用,不能直接写文字)
android:entries="@array/books" 填充下拉菜单的内容
二, 填充方式
1, 属性填充 数据源不会经常发生变化时,使用该方式
step1: 数据源 在strings.xml中定义<string_array name="books"><item>三国演义</item>...</string_array>
step2: 在spinner控件中 通过属性填充: android:entries="@array_books"
2, 使用ArrayAdapter 来填充数据
适用场景 : Item 只有一个文本, 不能显示图片
数据源 : String[] / List<String>
步骤 :
适配器三个臭皮匠:
1, 控件, 得到控件并且初始化
2, 得到数据源
3, 得到适配器
第一种方式 数据源是String[] 三个参数 , 在这个Activity中有2个页面
/**
* context 上下文对象
* resource 每个Item的布局文件(文件中只能有一个TextView控件,没有布局和其他控件)
* objects 数据源
*/
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,
android.R.layout.simple_spinner_item,
data);
第二种方式 数据源是String[] 四个参数
/**
* context 上下文对象
* resource 每个Item的布局文件(可以有布局,但是必须有TextView控件)
* textViewResourceId 布局文件中的TextView的ID
* objects 数据源
*
*/
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,
R.layout.spinner_item_02,
R.id.tv,
data);
第三种方式 数据源List<String> 三个参数 在这个Activity中有2个页面
/**
* context 上下文对象
* resource 每个Item的布局文件(文件中只能有一个TextView控件,没有布局和其他控件)
* objects 数据源
*/
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,
android.R.layout.simple_spinner_item,
data);
第四种方式 数据源是List<String> 四个参数
/**
* context 上下文对象
* resource 每个Item的布局文件(可以有布局,但是必须有TextView控件)
* textViewResourceId 布局文件中的TextView的ID
* objects 数据源
*
*/
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,
R.layout.spinner_item_02,
R.id.tv,
data);
3, 使用SimpleAdapter 填充数据
适用场景 图文混排,图片来自本地
数据源 List<Map<String,Object>>
步骤:
1, 控件, 得到控件并且初始化
2, 得到数据源
3, 得到适配器
4, 为控件设置适配器
/**
* context 上下文对象
* data 数据源
* resource 每个Item的布局页面
* from String[] 数据源中key的数组
* to int[] 布局页面中id的数组
*/
SimpleAdapter adapter = new SimpleAdapter(
this,
data,
R.layout.spinner_item,
new String[]{"icon","name","age"},
new int[]{R.id.icon,R.id.name,R.id.age});
三, 监听器
onItemSelectedListener
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
/**
* AdapterView<?> parent 监听器的下拉列表对象
* View view 当前被选中的View
* int position 当前被选中条目的位置(从0开始)
* long id 当前被选中View的Id
*/
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// TODO 选中内容触发
//从数据源中获取当前点击的内容
String info = data.get(position);
//从parent中获取当前点击的内容
String info2 = parent.getItemAtPosition(position).toString();
//从spinner中获取当前点击的内容
String info3 = spinner.getItemAtPosition(position).toString();
//从adapter中获取当前点击的内容
String info4 = adapter.getItem(position);
Toast.makeText(ArrayAdapterActivity.this, "info="+info+",info2="+info2+",info3="+info3+",info4="+info4, Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO 如果数据源清空后, 调用适配器的刷新方法时, 执行此方法
}
});
四, AutoCompleteTextView 自动提示的编辑框 父类: EditText
比EditText多了自动提醒的功能
android:completionThreshold="1" 输入几个字符完成提示 默认情况下是输入两个字符
监听器: addTextChangedListener