1

我的安卓应用有这个问题...

我有一个动态生成的屏幕,其中有几个 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;
                    }
                }
            }
        }
    };

创建文本框时会自动调用最后一个!

4

0 回答 0