2013-08-21 3 views
1
dateField.setOnFocusChangeListener(new OnFocusChangeListener() { 

     @Override 
     public void onFocusChange(View v, boolean hasFocus) {    
      if(!hasFocus && TextUtils.isEmpty(dateField.getText().toString())){ 
       dateField.setText(DateDefaultValue); 
      } else if (hasFocus && dateField.getText().toString().equals(DateDefaultValue)){ 
       dateField.setText("");     
      } 
      else 
      {btnShowHide.setVisibility(RelativeLayout.VISIBLE);} 
      if (!hasFocus) 
      { 
       if (dateField.getText().length() >0) 

        btnShowHide.setVisibility(RelativeLayout.INVISIBLE); 
      }   
     } 
    }); 

내가 setOnFocusChangeListener와 onTouchListener 및 복사 붙여 넣기를하지 않고 내 EDITTEXT 필드 내 모든 이벤트에 대한 내 이벤트를 재사용 할에 대한 setOnFocusChangeListener 이벤트.JAVA 재사용 onTouchListener, 글고

답변

1

익명 내부 메서드를 만드는 대신 새 클래스 (예 : MyListener())를 만들어야합니다.

class MyListener extends FocusChangeListener{ 
@Override 
public void onFocusChange(View v, boolean hasFocus) { 
     if(!hasFocus && TextUtils.isEmpty(dateField.getText().toString())){ 
     dateField.setText(DateDefaultValue); 
} else if (hasFocus&&dateField.getText().toString().equals(DateDefaultValue)){ 
     dateField.setText(""); 
}else{ 
     btnShowHide.setVisibility(RelativeLayout.VISIBLE);} 
     if (!hasFocus && dateField.getText().length() >0) 
     { 
     btnShowHide.setVisibility(RelativeLayout.INVISIBLE); 
     } 
} 
} 

과 같이 사용 : dateField.setOnFocusChangeListener(new MyListener()); 또한

I 당신은 하나 개의 수신기를 만들어야합니다 안드로이드 API에 익숙하지 않아요하지만 그것이 작동하지 않는 경우 implements

+0

많은 editText 필드가 있습니다. editText1, editText2를 사용하지 않음으로써 코드를 깔끔하고 단순하게 만들려면 해당 이벤트를 다시 사용해야합니다. 내 이벤트를 쉽게 재사용 할 수 있도록 하나의 변수 editTextEvent에 할당하고 싶습니다. – DreamBigAlvin

+0

그게 내가 네게 한 말야? Listener가 필요한 각 객체에 대해 간단히 Field1.setOnFocusChangeListener (new MyListener())를 사용합니다. - 또한 내 대답에 오류가 나타났습니다. 지금 고쳐야한다. – Damian

0

extends를 교체하려고 모든보기 이벤트를 이와 같이 참조하십시오.

private FocusChangeListener mFocusChangeListener = new OnFocusChangeListener() { 

     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if(v == dateField){....} 
      else if(v == nameField){....} 

      if(!hasFocus && TextUtils.isEmpty(dateField.getText().toString())){ 
       dateField.setText(DateDefaultValue); 
      } else if (hasFocus && dateField.getText().toString().equals(DateDefaultValue)){ 
       dateField.setText("");     
      } 
      else 
      {btnShowHide.setVisibility(RelativeLayout.VISIBLE);} 
      if (!hasFocus) 
      { 
       if (dateField.getText().length() >0) 

        btnShowHide.setVisibility(RelativeLayout.INVISIBLE); 
      }   
     } 
    } 

다음 :

dateField.setOnFocusChangeListener(mFocusChangeListener); 

희망이 도움말입니다.

+0

이 콜백의 잘못된 호출이 발생하지 않을까요? – ticofab