Eliminar fila añadida mediante addView - Que no atino!!!

  • Respuestas:0
Zoudan
  • Posts del Foro: 8

10 ago. 2015 16:37:39 vía Web

Buenas a todos,

Tengo un LinearLayout donde, con programación, añado "filas" al pulsar un botón. En realidad lo que hago es crear los elementos que quiero (una imagen, EditText...) y "unirlos" en una fila (un LinearLayout).

Luego añado ese LinearLayout al original y así consigo que se vayan añadiendo unas debajo de otras:

   public void addConcepto (View view) {
    lineNumber++;
    //Instance LinearLayout that is about to store each new Concepto line
    LinearLayout li = (LinearLayout) findViewById(R.id.listConceptos);

    //Creating new LinearLayout where I create new elements.
    //This is what I am going actually to add to the first LinearLayout
    LinearLayout horizontal = new LinearLayout(this);

    //Building up the line by adding elements to the new LinearLayout
    ImageButton et1 = new ImageButton(this);
    EditText et2 = new EditText(this);
    EditText et3 = new EditText(this);
    EditText et4 = new EditText(this);

    et1.setBackgroundColor(0);
    et1.setImageResource(R.drawable.minus_icon2);
    et1.setOnClickListener(new View.OnClickListener() { //Adding onClickListener to remove lines
        @Override
        public void onClick(View v) {
            removeConcepto(lineNumber);
        }
    });
    //ImageView et4 = new ImageView(this);

    et2.setHint("Concepto");
    et3.setHint("IVA");
    et4.setHint("Precio");

    et2.setWidth(150);
    et3.setWidth(150);
    et4.setWidth(150);
    //et4.setWidth(150);

    horizontal.addView(et1);
    horizontal.addView(et2);
    horizontal.addView(et3);
    horizontal.addView(et4);

    li.addView(horizontal);

   //Globals.listaConceptos.add();
   //et1.setTag(lineNumber);
}

Pues bien, como veréis por los trozos que tengo comentados, estoy tratando de añadir una imagen al comienzo de cada fila, que es un signo de menos, y así cuando pulse quiero que esa línea se elimine.

Tengo esta función:

   public void removeConcepto (int line) {
    LinearLayout li = (LinearLayout) findViewById(R.id.listConceptos);

    //int pos = (Integer) view.getTag(1);
    //li.removeViewAt(li.getChildCount());
    li.removeViewAt(line);
}

Que si pongo una línea fija, por ejemplo la "1", me la elimina. Pero no soy capaz de relacionar el número de fila con la fila real.

Mi intención era la que veis, un contador lineNumber que voy incrementando, y cuando creo la imagen de restar le asigno ese número al llamar a removeConcepto, pero me da fallos como si llamara a un objeto que no existe. Además de esta manera si creo tres filas, y borro la segunda. La que era la tercera seguirá teniendo el número "3" en su botón de borrar, cuando habrá pasado a ser el "2". No puede ser tan complicado!!.

Además de esto, como programador web que soy, me chirría que cada campo EditText no tenga un ID o nombre único, porque cuando el usuario acabe de añadir todas las filas (conceptos o productos en la aplicación) tendré que guardarlos todos en una base de datos... ¿cómo acceder a toda la información si no puedo diferenciar los campos?.

En PHP los campos tendrían en su nombre un ID dinámico, pero en Java aparte de no poderse hacer tal cual, es que no creo que sea tan "chapucero".

Por favor, cualquier ayuda será bienvenida.

Un saludo!

Contestar