Spinner + 适配器

来源:互联网 发布:路由器网络拒绝接入 编辑:程序博客网 时间:2024/06/05 11:12
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
0 0
原创粉丝点击