1

Androidアプリでこの問題が発生しています...

テキストボックスなどのいくつかの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