之所以写这个呢,是因为我自己刚好在做项目中遇到了这个问题,然后就上百度啊啥的,经过大量搜索,发现大多写的不全,而且有的就不对,运行出来都或多或少有点问题。不多说了,直接上代码,希望对新生小白有点帮助。
//自定义spinner:
public void ComboBox(){
//资源转[]
String meinv[]=getResources().getStringArray(R.array.screen_angle);
//构造ArrayAdapter
Adapter adapter = new ArrayAdapter<String>(this,R.layout.spinner_item,meinv);
//设置下拉样式以后显示的样式
adapter.setDropDownViewResource(R.layout.dropdown_stytle);
//将适配器与下拉列表关联manufacturer spinner的id
manufacturer.setAdapter(adapter);
//禁止OnItemSelectedListener默认自动调用一次
//manufacturer.setSelection(0,true);(再次点击第一项无内容显示)
manufacturer.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
//禁止OnItemSelectedListener默认自动调用一次
if(isSpinnerFirst){
view.setVisibility(View.INVISIBLE);
isSpinnerFirst = false;
}else{
view.setVisibility(View.VISIBLE);
//获取选择项值
String result = parent.getItemAtPosition(position).toString();
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
//解决spinner的item点击事件只能点击一次
manufacturer.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
try {
Class<?>clazz = AdapterView.class;
Field field = clazz.getDeclaredField("mOldSelectedPosition");
field.setAccessible(true);
field.setInt(manufacturer,AdapterView.INVALID_POSITION);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
});
}