Очистка определенных переменных активности с помощью onResume

Я создаю простое приложение для Android с 2 действиями. На занятии B отображается набор данных, переданных из A. Когда пользователь нажимает кнопку "Назад" в B I, необходимо очистить некоторые переменные, чтобы не дублировать данные, показанные на B, но обе переменные, которые я стираю в onResume(), не являются очистка на всех. Вот мой код:

public class MainActivity extends AppCompatActivity {

List<Camarera> camareras = new ArrayList<Camarera>();
List<String> resultados = new ArrayList<String>();

int camHabs = 0;

Button boton;

TextView dinero;
TextView camarera1, camarera2, camarera3, camarera4, camarera5;

EditText hora1, hora2, hora3, hora4, hora5;
EditText resta1, resta2, resta3, resta4, resta5;

Switch switch1, switch2, switch3, switch4, switch5;

@Override
public void onResume()
{  
    super.onResume();
    resultados = new ArrayList<>();
    camHabs = 0;
    Toast.makeText(getApplicationContext(),"Resumiendo", Toast.LENGTH_LONG).show();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    boton = (Button) findViewById(R.id.Boton);

    camHabs = 0;

    boton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Calcular();
        }
    });
}

void Calcular(){

    dinero = (TextView) findViewById(R.id.Dinero);

    camarera1 = (TextView) findViewById(R.id.Camarera1);
    camarera2 = (TextView) findViewById(R.id.Camarera2);
    camarera3 = (TextView) findViewById(R.id.Camarera3);
    camarera4 = (TextView) findViewById(R.id.Camarera4);
    camarera5 = (TextView) findViewById(R.id.Camarera5);

    hora1 = (EditText) findViewById(R.id.C_Horas1);
    hora2 = (EditText) findViewById(R.id.C_Horas2);
    hora3 = (EditText) findViewById(R.id.C_Horas3);
    hora4 = (EditText) findViewById(R.id.C_Horas4);
    hora5 = (EditText) findViewById(R.id.C_Horas5);

    resta1 = (EditText) findViewById(R.id.C_Resta1);
    resta2 = (EditText) findViewById(R.id.C_Resta2);
    resta3 = (EditText) findViewById(R.id.C_Resta3);
    resta4 = (EditText) findViewById(R.id.C_Resta4);
    resta5 = (EditText) findViewById(R.id.C_Resta5);

    switch1 = (Switch) findViewById(R.id.C_Switch1);
    switch2 = (Switch) findViewById(R.id.C_Switch2);
    switch3 = (Switch) findViewById(R.id.C_Switch3);
    switch4 = (Switch) findViewById(R.id.C_Switch4);
    switch5 = (Switch) findViewById(R.id.C_Switch5);


    List<TextView> nombres = Arrays.asList(camarera1, camarera2, camarera3, camarera4, camarera5);
    List<EditText> horas = Arrays.asList(hora1, hora2, hora3, hora4, hora5);
    List<EditText> restas = Arrays.asList(resta1, resta2, resta3, resta4, resta5);
    List switches = Arrays.asList(switch1, switch2, switch3, switch4, switch5);

    int resultado;
    int maxHoras = 0;
    int Dinero = Integer.parseInt(dinero.getText().toString());

    for (int i = 0; i < nombres.size(); i++) {
        Camarera cam = new Camarera();

        cam.SetNombre(nombres.get(i).getText().toString());
        cam.SetHoras(horas.get(i).getText().toString());
        maxHoras += cam.GetHoras();
        cam.SetResta(restas.get(i).getText().toString());
        Switch var = (Switch) switches.get(i);
        cam.activa = var.isChecked();

        camareras.add(cam);
        }

        for (int i = 0; i < camareras.size(); i++) {
            Camarera cam = camareras.get(i);

            if (cam.activa) {
                camHabs++;
                if (cam.error) {
                    Toast.makeText(getApplicationContext(),cam.error_S, Toast.LENGTH_LONG).show();
                    return;
                }


                resultado = ((cam.GetHoras() * Dinero) / maxHoras) - cam.GetResta();
                resultados.add(cam.GetNombre() + " se lleva " + resultado + "€");
            }
    }

    Intent intent = new Intent(MainActivity.this, Tabla.class);
    intent.putExtra("lista", (ArrayList<String>) resultados);
    intent.putExtra("habs", camHabs);
    startActivity(intent);



}

Не могли бы вы мне помочь, пожалуйста? Застрял с этим весь день.

3 ответа

На самом деле, ошибка была не в этих двух переменных, а в третьей, называемой "camareras", я не очищал ее, и потому что я использую ее в каждом цикле, она будет снова и снова добавляться в "camHabs".

В любом случае спасибо!

Попробуйте приравнять их к нулю в Resume, а затем воссоздайте пустое значение, как вы уже сделали. Дайте мне знать, если это работает.

Из документов на OnResume:

Имейте в виду, что система вызывает этот метод каждый раз, когда ваша деятельность выходит на передний план, в том числе, когда она создается впервые.

Он даже вызывается, когда вы нажимаете кнопку "Домой" / переключаете приложения, поэтому я не думаю, что это хорошая идея сделать это здесь.

Почему бы просто не сделать это, прежде чем позвонить startActivity вызов:

Intent intent = new Intent(MainActivity.this, Tabla.class);
intent.putExtra("lista", (ArrayList<String>) resultados);
intent.putExtra("habs", camHabs);

//Reset variables here
resultados = new ArrayList<>();
camHabs = 0;

startActivity(intent);
Другие вопросы по тегам