¿Cómo puedo manejar OnClickListener de un botón creado de forma dinámica?

blanda:

Estoy intentando crear botones 'n' en base al usuario la opción que ha seleccionado. Los botones pueden variar de 1 a 3. Sin embargo estoy teniendo dificultades al intentar actualizar la variable dependiendo del botón pulsado. Se da la "variable utilizada en la expresión lambda debe ser final o efectivamente final" error. Yo entiendo el error, pero no puedo averiguar cómo puedo resolver este problema. Aquí está mi código de ejemplo:

        for (int i = 0; i < options; i++) {
            Button button = new Button(this);
            button.setId(position);
            buttons[i] = button;
            buttons[i].setOnClickListener(v -> {
                tempToMaintain.setValue(listParameters.get(i));

            });
        }

'Opciones' contienen el número de botones para crear, tempToMaintain es una variable que se hace referencia desde Firebase. Estoy tratando de obtener el valor de la lista y actualizarla en Firebase. ¿Cómo puedo lograr esto, cualquier ayuda es muy apreciada.

alainlompo:

en Java no se puede utilizar no finales (y también no-finales efectivamente las variables) en lambda, así como en las clases internas anónimas.

Se podría deshacerse de la expresión lambda mediante la creación de una clase que implementa la View.OnClickListenerinterfaz y le dan la variable i como un parámetro de constructor.

por ejemplo:

class MyButtonClickListener implements View.OnClickListener {
   private int parameterIndex;

   public MyButtonClickListener(int parameterIndex) {
      this.parameterIndex = parameterIndex;
   }

   public void onClick(View v) {
      tempToMaintain.setValue(listParameters.get(parameterIndex));
   }
}

Y que debe ser la misma. Pase tempToMaintain y listParameters como parámetros del constructor (tal como lo hicimos con índiceParámetros ) si sus nuevas instancias de la clase no pueden acceder a ellos contextualmente.

Ahora se puede cambiar el enlace al controlador de eventos clickListener para parecerse a:

for (int i = 0; i < options; i++) {
   Button button = new Button(this);
   button.setId(position);
   buttons[i] = button;
   buttons[i].setOnClickListener(new MyButtonClickListener(i));
}

Espero que esto ayude.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=292654&siteId=1
Recomendado
Clasificación