Очистка определенных переменных активности с помощью 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);