Spinner提供了从一个数据集合中快速选择一项值的办法。默认情况下Spinner显示的是当前选择的值,点击Spinner会弹出一个包含所有可选值的dropdown菜单,从该菜单中可以为Spinner选择一个新值。
举例一:使用ArrayAdapter进行适配数据,
在values文件夹下创建一个arrays.xml文件,作为spinner的数据源,
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="week"> <item >星期一</item> <item >星期二</item> <item >星期三</item> <item >星期四</item> <item >星期五</item> <item >星期六</item> <item >星期天</item> </string-array> </resources>
在布局文件中添加spinner的布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Spinner android:id="@+id/spin_one" android:layout_width="match_parent" android:layout_height="64dp" android:entries="@array/week" android:spinnerMode="dropdown" android:prompt="@string/first_fragment_label"/> </LinearLayout>
public class FragmentFive extends Fragment implements AdapterView.OnItemSelectedListener{
private Spinner spin_one;
private ArrayList<week> mData = null;
private SpinnerAdapter myAdadpter = null;
private Context context;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragmentfive,container,false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
spin_one = (Spinner)getActivity().findViewById(R.id.spin_one);
spin_one.setOnItemSelectedListener(this);
// 建立数据源
String[] mItems = getResources().getStringArray(R.array.week);
// 建立Adapter并且绑定数据源,这个是使用了系统的定义的下拉列表布局
ArrayAdapter<String> _Adapter=new ArrayAdapter<String>(getContext(),R.layout.support_simple_spinner_dropdown_item, mItems);
//绑定 Adapter到控件
spin_one.setAdapter(_Adapter);
}
//选择列表项的操作
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (parent.getId()){
case R.id.spin_one:
String str=parent.getItemAtPosition(position).toString();
Log.d("w",str);
break;
}
}
//未选中时候的操作
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
绑定数据源使用自定义下拉布局:
ArrayAdapter<String> _Adapter=new ArrayAdapter<String>(getContext(),R.layout.week_item, mItems);
layout下的week_item布局:
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/weekitem" android:layout_width="match_parent" android:layout_height="wrap_content" />
举例二:使用自定义的Adapter
week_item.xml 列表显示的一行view
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/weekitem" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/first_fragment_label" /> </LinearLayout>
添加spinner布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Spinner android:id="@+id/spin_one" android:layout_width="match_parent" android:layout_height="64dp" /> </LinearLayout>
创建一个week.java类
public class week { private String weekname; public week(String weekname) { this.weekname = weekname; } public String getWeekname() { return weekname; } public void setWeekname(String weekname) { this.weekname = weekname; } }
public class FragmentFive extends Fragment implements AdapterView.OnItemSelectedListener{
private Spinner spin_one;
private ArrayList<week> mData = null;
private SpinnerAdapter myAdadpter = null;
private Context context;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragmentfive,container,false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
spin_one = (Spinner)getActivity().findViewById(R.id.spin_one);
mData=new ArrayList<week>();
context=getContext();
mData.add(new week("星期一"));
mData.add(new week("星期二"));
mData.add(new week("星期三"));
mData.add(new week("星期四"));
mData.add(new week("星期五"));
mData.add(new week("星期六"));
mData.add(new week("星期日"));
myAdadpter = new MyAdapter(mData,context);
spin_one.setAdapter(myAdadpter);
spin_one.setOnItemSelectedListener(this);
}
//选择列表项的操作
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (parent.getId()){
case R.id.spin_one:
String str=parent.getItemAtPosition(position).toString();
Log.d("w",str);
break;
}
}
//未选中时候的操作
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
//自定义一个是适配器
private class MyAdapter extends BaseAdapter {
private ArrayList<week> list;
private Context context;
public MyAdapter(ArrayList<week>list,Context context){
this.list=mData;
this.context=context;
}
/**
* 返回数据的个数
* */
@Override
public int getCount() {
return list.size();
}
/**
*返回对应位置上的数据
* */
@Override
public Object getItem(int position) {
return list.get(position);
}
/**
*一般是返回position,没什么实际作用,也可以返回其他的值,看具体看需要
*/
@Override
public long getItemId(int position) {
return position;
}
/**
*显示的view
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater _LayoutInflater=LayoutInflater.from(context);
if(convertView==null) {
convertView = _LayoutInflater.inflate(R.layout.week_item, null);
}
TextView _TextView1=(TextView)convertView.findViewById(R.id.weekitem);
_TextView1.setText(list.get(position).getWeekname());
return convertView;
}
}
}