我的安卓应用有这个问题...
我有一个动态生成的屏幕,其中有几个 UI 组件,例如文本框等...我的问题是,当我单击调用此屏幕的按钮并创建文本框时,它们的处理程序(更具体地说:OnFocusChangeListener)是无需用户干预即可自动调用...
我该如何解决这个问题?是否有任何方法可以防止将焦点放在最近创建的元素上?
请帮帮我!
这是一些代码!
满足条件时,将创建这些控件!
if(tipoP.equals("TEXTO LIBRE")){
//Variables a crear dinamicamente
EditText et = new EditText(this);
LayoutParams params2 = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, (float) 0.3);
//Se preparan dichas variables
params2.setMargins(20, 0, 20, 0);
et.setLayoutParams(params2);
//et.setOnKeyListener(lii);
et.requestFocusFromTouch();
et.setOnFocusChangeListener(l);
ll.addView(et);
if(filas.length != 0){
//Log.e("la longitud es mayor que cero",filas2.length+"");
for(int j=0;j<filas.length;j++){
//Log.e("estoy en el for",j+"");
if(c.getInt(c.getColumnIndex("id_medicion")) == Integer.parseInt(filas[j][0])){
//Log.e("mediciones iguales",c.getInt(c.getColumnIndex("id_medicion"))+ " = "+ Integer.parseInt(filas2[j][0]));
et.setText(filas[j][1]);
}
}
}
if(filas2.length != 0){
//Log.e("la longitud es mayor que cero",filas2.length+"");
for(int j=0;j<filas2.length;j++){
//Log.e("estoy en el for",j+"");
if(c.getInt(c.getColumnIndex("id_medicion")) == Integer.parseInt(filas2[j][0])){
//Log.e("mediciones iguales",c.getInt(c.getColumnIndex("id_medicion"))+ " = "+ Integer.parseInt(filas2[j][0]));
et.setText(filas2[j][1]);
}
}
}
guardar g = new guardar();
g.idmedicion = c.getInt(c.getColumnIndex("id_medicion"));
otro2.add(g);
ids.add(c.getInt(c.getColumnIndex("id_medicion")));
}
上面控件相关事件的处理程序!
OnFocusChangeListener l = new OnFocusChangeListener(){
public void onFocusChange(View v, boolean hasFocus) {
EditText et = (EditText) v;
if(hasFocus == false){
Log.e("OnFocusChangeListener","l");
for(int i=0;i<rows.length;i++){
Log.e("for",i+"");
if(otro2.lastElement().idmedicion == rows[i][0]){
Log.e("iguales",otro2.lastElement().idmedicion + " == " + rows[i][0]);
otro2.lastElement().resultado = (String) et.getText().toString();
Log.e("resultado",otro2.lastElement().resultado);
break;
}
}
}
}
};
创建文本框时会自动调用最后一个!