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 字段重用我的所有事件,而不进行复制粘贴。

4

2 回答 2

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());

另外我不熟悉Android API,但如果它不起作用,请尝试extends替换implements

于 2013-08-21T02:16:05.750 回答
0

您应该只创建一个侦听器并将所有视图事件都引用到这个

   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);

希望这有帮助。

于 2013-08-21T02:26:39.980 回答