我有我想要保存与setOnFocusChangeListener的SQLiteDatabase数的EditText领域。 我必须设置每个单独的一个一个onFocusChangeListener,还是有一个包罗万象的某种? (getActivity()。findViewByID因为这是一个片段)
final TextView txtName = (TextView)getActivity().findViewById(R.id.clientHeader);
final TextView txtCompany = (TextView)getActivity().findViewById(R.id.txtContactCompany);
final TextView txtPosition = (TextView)getActivity().findViewById(R.id.txtContactPosition);
txtName.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus) {
saveThisItem(txtClientID.getText().toString(), "name", txtName.getText().toString());
}
}
});
txtCompany.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus) {
saveThisItem(txtClientID.getText().toString(), "company", txtCompany.getText().toString());
}
}
});
txtPosition.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus) {
saveThisItem(txtClientID.getText().toString(), "position", txtPosition.getText().toString());
}
}
});
像......是有一些办法有意见的EditText一个ArrayList的<EditText上>,指定一个指针(对不起,不知道如何),以现有的editTexts并设置onFocusChangeListener整个数组列表? 或者,甚至,遍历该ArrayList和设置onFocusChangeListener到每个成员?
或者一种方法来检测任何onFocusChangeListener事件,只是所有的数据保存到数据库中,不管是什么EDITTEXT的甚至发生了?
好了,你可以有你的活动实施OnFocusChangeListener
。 这样一来,所有的修改将是一个实现方法具,d但你必须通过获取与视图id检查哪些改变视图焦点v.getId()
和相应的处理。
@Override
public void onFocusChange(View v, boolean hasFocus) {
switch(v.getId()){
case r.id.editText1:
break;
...etc
}
}
有很多你可以做这个简单的方法。 其一,怎么样这个抽象成一个方法,把它的每个TextView
要添加的事件:
private void setOnFocusChangeListener(TextView textView, String name){
textView.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus) {
saveThisItem(txtClientID.getText(), name,
textView.getText());
}
}
});
}
然后,您可以拨打为每一个TextView的情况下,这种方法:
setOnFocusChangeListener(txtName, "name");
setOnFocusChangeListener(txtCompany, "company");
setOnFocusChangeListener(txtPosition, "position");
我的建议是使用自定义EditText
来处理这给你:
public class SaveEditText extends EditText implements View.OnFocusChangeListener {
private String mDataKey;
private String mClient;
public SaveEditText (Context context) {
super(context);
setOnFocusChangeListener(this);
}
public SaveEditText (Context context, AttributeSet attrs) {
super(context, attrs);
setOnFocusChangeListener(this);
}
public void setDataKey (String dataKey) {
mDataKey = dataKey;
}
public void setClient (String client) {
mClient = client;
}
@Override
public void onFocusChange (View v, boolean hasFocus) {
saveThisItem(mClient, mDataKey, getText().toString());
}
}
您可能决定以不同的方式处理客户端和数据的密钥,但这个想法是,你使用自定义的基类,它会自动处理它。
或者更简单
OnFocusChangeListener listener;
listener = new new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
... }
}
});
textbox1. setOnFocusChangeListener(listener);
textbox2. setOnFocusChangeListener(listener);
textbox3. setOnFocusChangeListener(listener);
由于onFocusChange(查看V,布尔hasFocus)具有参数视图中,您可以用它来判断哪些观点称之为