带有扩展 EditText 的回调
Callback with extended EditText
我正在尝试创建一个提供 onLostFocus
事件的自定义 EditText
。但是,当焦点丢失时,我无法理解如何告诉自定义 class 什么方法 运行。
这是我的扩展 EditText
:
public class smtyEditText extends EditText {
public smtyEditText(Context context) {
super(context);
}
public smtyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public smtyEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setFocusChangeListener() {
this.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
// notify the relevant activity, probably passing it some parameters like what instance of smtyEditText triggered the event.
}
}
});
}
}
setFocusChangeListener
函数的目的是从任何给定的 activity 我可以做类似的事情:
public class AddMeal extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_meal);
EditText etMealName = (EditText) findViewById(R.id.txtmealName);
etMealName.setFocusChangeListener(this.fieldLostFocus)
}
// then
public void fieldLostFocus(eventSource) {
// run some kind of validation on the field text.
}
}
显然我 "code paraphrasing" 在这里。我还得到了接口,可能还需要其他一些 "EventNotifier" class。到目前为止,这些是我试图破译的资源:
- http://www.javaworld.com/article/2077462/learn-java/java-tip-10--implement-callback-routines-in-java.html
- How to Define Callbacks in Android?
- http://www.justinmccandless.com/blog/Setting+Up+a+Callback+Function+in+Android
但无论出于何种原因,我无法明确需要什么。你对我如何实现这一点有什么建议吗?
您不需要继承...它只会添加一个不必要的间接层。只需在 activity.
中添加焦点更改处理程序
public class AddMeal extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_meal);
EditText etMealName = (EditText) findViewById(R.id.txtmealName);
etMealName.setFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
// call method to handle loss of focus
}
}
});
}
// then
public void fieldLostFocus(eventSource) {
// run some kind of validation on the field text.
}
}
我正在尝试创建一个提供 onLostFocus
事件的自定义 EditText
。但是,当焦点丢失时,我无法理解如何告诉自定义 class 什么方法 运行。
这是我的扩展 EditText
:
public class smtyEditText extends EditText {
public smtyEditText(Context context) {
super(context);
}
public smtyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public smtyEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setFocusChangeListener() {
this.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
// notify the relevant activity, probably passing it some parameters like what instance of smtyEditText triggered the event.
}
}
});
}
}
setFocusChangeListener
函数的目的是从任何给定的 activity 我可以做类似的事情:
public class AddMeal extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_meal);
EditText etMealName = (EditText) findViewById(R.id.txtmealName);
etMealName.setFocusChangeListener(this.fieldLostFocus)
}
// then
public void fieldLostFocus(eventSource) {
// run some kind of validation on the field text.
}
}
显然我 "code paraphrasing" 在这里。我还得到了接口,可能还需要其他一些 "EventNotifier" class。到目前为止,这些是我试图破译的资源:
- http://www.javaworld.com/article/2077462/learn-java/java-tip-10--implement-callback-routines-in-java.html
- How to Define Callbacks in Android?
- http://www.justinmccandless.com/blog/Setting+Up+a+Callback+Function+in+Android
但无论出于何种原因,我无法明确需要什么。你对我如何实现这一点有什么建议吗?
您不需要继承...它只会添加一个不必要的间接层。只需在 activity.
中添加焦点更改处理程序public class AddMeal extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_meal);
EditText etMealName = (EditText) findViewById(R.id.txtmealName);
etMealName.setFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
// call method to handle loss of focus
}
}
});
}
// then
public void fieldLostFocus(eventSource) {
// run some kind of validation on the field text.
}
}