[ Foro de Java ]

Recorrido de una lista y operaciones con los objetos dentro de ella.

12-Apr-2020 18:56
Gabriel Giuseppi
0 Respuestas

Hola, estoy empezando en el mundo de la programació, en concreto java/android studio y la verdad es que estoy bastante verde, por ahora programo mas por instinto que por entender el concepto de lo que hago realmente. Tengo una duda con respecto a mi programa y es que no se si estoy haciendo el recorrido de un ListView de la manera correcta o si es que por el contrario, que no estoy guardando de manera correcta los elementos en ella.

El programa es bastante simple a mi parecer, la idea es una app donde puedes introducir tus ingresos y gastos del mes y al final en un TextView te muestra un saldo X, mi código esta así:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {


   private ArrayList<Movimientos> listaMovimientos;
   private ArrayAdapter<Movimientos> adaptador;
   private Object Movimientos;
   TextView tvSaldo = null;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);

       Button btIngreso = findViewById(R.id.btIngreso);
       btIngreso.setOnClickListener(this);
       Button btEgreso = findViewById(R.id.btEgreso);
       btEgreso.setOnClickListener(this);
       Button btSaldoTotal = findViewById(R.id.btSaldoTotal);
       btSaldoTotal.setOnClickListener(this);
       Button btBorrar = findViewById(R.id.btBorrar);
       btBorrar.setOnClickListener(this);

       listaMovimientos = new ArrayList<>();
       adaptador = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, listaMovimientos);
       ListView ltMovimientos = findViewById(R.id.ltMovimientos);
       ltMovimientos.setAdapter(adaptador);

   }

   @Override
   public void onClick(View v) {

       EditText etMontos = null;
       EditText etDetalle = null;
       String detalle;
       float egreso;
       float ingreso;

       switch(v.getId()) {

           case R.id.btIngreso:

               etMontos = findViewById(R.id.etMontos);
               etDetalle = findViewById(R.id.etDetalle);

               if(etMontos.getText().toString().isEmpty()){
                   Toast.makeText(this, R.string.mIntroduzcaMonto, Toast.LENGTH_SHORT).show();
                   return;
               }

               if (etDetalle.getText().toString().isEmpty()){

                   Toast.makeText(this, R.string.mCampoObligatoiro, Toast.LENGTH_SHORT).show();
                   return;
               }

               detalle = etDetalle.getText().toString();
               ingreso = Float.parseFloat(etMontos.getText().toString());

               Movimientos movimiento = new Movimientos(detalle, ingreso);

               listaMovimientos.add(movimiento);
               adaptador.notifyDataSetChanged();

               etMontos.setText("");
               etDetalle.setText("");
               etMontos.requestFocus();

               break;

           case R.id.btEgreso:

               etMontos = findViewById(R.id.etMontos);
               etDetalle = findViewById(R.id.etDetalle);

               if(etMontos.getText().toString().isEmpty() || etMontos.getText().toString().equals("0")){
                   Toast.makeText(this, R.string.mIntroduzcaMonto, Toast.LENGTH_SHORT).show();
                   return;
               }

               if (etDetalle.getText().toString().isEmpty()){

                   Toast.makeText(this, R.string.mCampoObligatoiro, Toast.LENGTH_SHORT).show();
                   return;
               }

               detalle = etDetalle.getText().toString();
               egreso = Float.parseFloat(etMontos.getText().toString());

               Movimientos movimiento2 = new Movimientos(detalle, egreso);

               listaMovimientos.add(movimiento2);
               adaptador.notifyDataSetChanged();

               etMontos.setText("");
               etDetalle.setText("");
               etMontos.requestFocus();

               break;

           case R.id.btSaldoTotal:

               saldoTotal();

               break;

           case R.id.btBorrar:

               tvSaldo.setText("");
               listaMovimientos.clear();
               adaptador.notifyDataSetChanged();

           default:
               break;
       }

   }

   public void saldoTotal() {

       float auxI = 0;
       float auxE = 0;
       float saldoTotal = 0;

       for (Movimientos movimientos : listaMovimientos){

           auxI += movimientos.getIngresos();
       }

       for (Movimientos movimiento2 : listaMovimientos ){

           auxE += movimiento2.getIngresos();
       }

       saldoTotal = auxI - auxE;
       String stringTotal = Float.toString(saldoTotal);

       tvSaldo = findViewById(R.id.tvSaldo);
       tvSaldo.setText(getString(R.string.mSumaMovimientos)+ ": " + stringTotal);
   }

}

//CLASE
package com.tokioschool.ahorrapp;

import java.lang.reflect.Array;

class Movimientos {

   private String detalle;
   private float ingresos;


public Movimientos (String detalle, float ingresos){

   this.detalle = detalle;
   this.ingresos = ingresos;

}

   public String getDetalle() {

   return detalle;
}

   public float getIngresos() {

       return ingresos;
   }


   @Override
   public String toString() {

       return "(" + detalle + ") " + ingresos;
   }
}

Cualquier comentario para mejorarlo o consejos, son bienvenidos, muchas gracias de antemano.




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)