最近有一個蛋疼的需求,在下拉框中,如果只有一個值,默認顯示出來,有兩個或者沒有顯示請選擇,沒有點擊不彈框,但是要清空,兩個點擊開要移掉請選擇字樣的項
本來以為很簡單,后來發現沒有OnClickListener,沒辦法,重寫了一個Spinner
public class CSIISpinner extends Spinner {
?
public CSIISpinner(Context context) {
super(context);
}
?
public CSIISpinner(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
?
public CSIISpinner(Context context, AttributeSet attrs) {
super(context, attrs);
}
?
private boolean isMoved = false;
private Point touchedPoint = new Point();
@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getRawX();
int y = (int) event.getRawY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN :
touchedPoint.x = x;
touchedPoint.y = y;
break;
case MotionEvent.ACTION_MOVE :
isMoved = true;
break;
case MotionEvent.ACTION_UP :
if (isMoved) {
// 從上向下滑動
if (y - touchedPoint.y > 20) {
}
// 從下向上滑動
else if (touchedPoint.y - y > 20) {
}
// 滑動幅度小時,當作點擊事件
else {
onClick();
}
isMoved = false;
} else {
onClick();
}
break;
default :
break;
}
return true;
}
?
private void onClick() {
if (OnClickListener != null && isEnabled()) {
OnClickListener.onClick();
}
}
?
private OnClickListener OnClickListener;
?
/**
* 注冊自定義的點擊事件監聽
*
* @param onClickMyListener
*/
public void setOnClickListener(OnClickListener OnClickListener) {
this.OnClickListener = OnClickListener;
}
?
/**
* 自定義點擊事件監聽.
*/
public interface OnClickListener {
public void onClick();
}
}
后來發現這個用起來確實可以實現,但是不足之處就是太繁瑣了
調用如下
subadapter = new ArrayAdapter<SubAccount>(NoticeDepositDrawPreActivity.this,R.layout.spinner_simple_item,subAccountList);
subadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner_subacno.setAdapter(subadapter);
spinner_subacno.setPrompt("--請選擇分賬號序號--");
spinner_subacno.setOnClickListener(new CSIISpinner.OnClickListener() {
//此處新增一部分邏輯控制分賬序號顯示
@Override
public void onClick() {
if(subAccountList.size()==1&&subAccountList.get(0).getFenAcctNo().contains("請選擇分賬號序號")){
Component.alertDialog(NoticeDepositDrawPreActivity.this, "該帳號下面沒有分賬號信息");
subAccountList.get(0).setFenAcctNo("");
subadapter.notifyDataSetChanged();
}else{
if(subAccountList.get(0).getFenAcctNo().contains("請選擇分賬號序號")){
subAccountList.remove(0);
}
if("".equals((subAccountList.get(0).getAvailBal()))){
tv_balance.setText("");
}else{
tv_balance.setText(subAccountList.get(0).getAvailBal()+ "元");
}
ubadapter.notifyDataSetChanged();
spinner_subacno.performClick();
}
}
});
spinner_subacno.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent,View view, int position, long id) {
tv_balance.setText(subAccountList.get(position).getAvailBal()+ "元");
if("".equals((subAccountList.get(position).getAvailBal()))){
tv_balance.setText("");
}else{
tv_balance.setText(subAccountList.get(position).getAvailBal()+ "元");
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
好煩,將就用吧,有時間研究研究重寫Spinner的Adapter怎么寫,應該能控制Adapter會更加合理