如何在android中为30个edittext添加全局焦点侦听器

7ivaypg9  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(406)

我试图在android上做一个纵横填字游戏,我想为所有的edittext添加一个focuslistener,这样当我在上面写一个字符并将我的焦点切换到其他edittext时,它会检查我是否输入了正确的字符(设置背景绿色)或者没有(设置背景红色)。
现在我有了这个

campo1= new CampoCrossword(R.id.et_2_7_E, 'E');
        campo2= new CampoCrossword(R.id.et_2_6_M, 'M');
        campo3= new CampoCrossword(R.id.et_2_5_R, 'R');
        campo4= new CampoCrossword(R.id.et_4_7_A, 'A');
        campo5= new CampoCrossword(R.id.et_4_8_T, 'T');
        campo6= new CampoCrossword(R.id.et_4_9_A, 'A');
        campo7= new CampoCrossword(R.id.et_4_4_R, 'R');
        campo8= new CampoCrossword(R.id.et_4_5_E, 'E');
        campo9= new CampoCrossword(R.id.et_2_4_E, 'E');
        campo10= new CampoCrossword(R.id.et_2_3_B, 'B');
        campo11= new CampoCrossword(R.id.et_3_6_A, 'A');
        campo12= new CampoCrossword(R.id.et_4_6_G, 'G');
        campo13= new CampoCrossword(R.id.et_5_6_D, 'D');
        campo14= new CampoCrossword(R.id.et_6_7_K, 'K');
        campo15= new CampoCrossword(R.id.et_6_8_A, 'A');
        campo16= new CampoCrossword(R.id.et_6_5_D, 'D');
        campo17= new CampoCrossword(R.id.et_6_3_U, 'U');
        campo18= new CampoCrossword(R.id.et_5_3_J, 'J');
        campo19= new CampoCrossword(R.id.et_7_3_L, 'L');
        campo20= new CampoCrossword(R.id.et_10_4_I, 'I');
        campo21= new CampoCrossword(R.id.et_10_5_Z, 'Z');
        campo22= new CampoCrossword(R.id.et_10_7_R, 'R');
        campo23= new CampoCrossword(R.id.et_10_8_O, 'O');
        campo24= new CampoCrossword(R.id.et_9_3_O, 'O');
        campo25= new CampoCrossword(R.id.et_8_3_I, 'I');
        campo26= new CampoCrossword(R.id.et_6_2_M, 'M');
        campo27= new CampoCrossword(R.id.et_6_4_N, 'N');
        campo28= new CampoCrossword(R.id.et_6_6_A, 'A');
        campo29= new CampoCrossword(R.id.et_8_6_E, 'E');
        campo30= new CampoCrossword(R.id.et_9_6_N, 'N');
        campo31= new CampoCrossword(R.id.et_10_6_A, 'A');
        campo32= new CampoCrossword(R.id.et_7_6_L, 'L');

/*i was trying to do it with one first and then with all but it doesnt work xD*/
findViewById(R.id.et_2_8_O).setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                check();
            }
        });
x8goxv8g

x8goxv8g1#

我解决了我的问题,在arraylist上输入了所有的edittext,并使用foreach添加focuschangelistener,如下所示

for (CampoCrossword campo:ListaCampos) {
        viewGeneralFragmen.findViewById(campo.id).setOnFocusChangeListener(new View.OnFocusChangeListener(){
            @Override
            public void onFocusChange(View v, boolean hasFocus){
                comprobarCampos();
                aplicarColor();
                comprobarSiHasGanado();
            }
        });

顺便说一句,listacampos是arraylist,campocrosword是我用edittext id示例化一个对象的类

oiopk7p5

oiopk7p52#

你创造了一堆 View s(我想 CampoCrossword 是一个扩展 View ,但是当你打电话的时候 findViewById() ,框架将在当前 View 层次结构(由 setContentView() )返回一个 View 只需要创建 CampoCrossword 并没有把它们放进 View 等级制度。

相关问题