при возвращении на первое activity не сохраняются данные в listview

у меня есть вот такая задача: Создайте класс Computer с двумя полями: title (название) и price (цена). Добавьте на экран текстовые поля для названия и для цены, а также выведите кнопку «Добавить». При нажатии на кнопку «Добавить» должен быть создан объект Computer на основе данных от пользователя. Объект должен быть отправлен на второй Activity. Во втором Activity должна быть кнопка «Назад», возвращая на первый Activity и вывод с помощью списка (ListView) всех компьютеров, созданных пользователем. То есть, добавил один компьютер – в списке один, затем вернулся назад, добавил ещё один – и на втором Activity уже 2 компьютера выводятся (первый и второй), вернулся назад, добавил ещё – и уже 3 компьютера в списке и так далее. всю задачу я реализовал,кроме сохранения списка компьютеров,при нажатии добавить он добавляется ,а после возвращения и добавления еще одного объекта, выводится новый объект а старого уже нет. помоги реализовать данный код.вот код с кнопкой назад:

public class Price extends AppCompatActivity implements View.OnClickListener{
ListView lv;
computer p;
ArrayAdapter<computer> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_price);



    Bundle args =getIntent().getExtras();
    if (args !=null){
         p =(computer) args.getSerializable(computer.class.getSimpleName());
        lv=findViewById(R.id.lv);
        ArrayList<computer> pers =new ArrayList<>();
        pers.add(new computer(p.getTitle(),p.getPrice()));
        System.out.println(pers);
        adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,pers);
        lv.setAdapter(adapter);



    }



    Button button = findViewById(R.id.button);
    button.setOnClickListener(this);

}
@Override
public void onClick(View v) {
    Intent intent =new Intent(this,MainActivity.class);
   startActivity(intent);


}

}


Ответы (1 шт):

Автор решения: Андрей Поляков

Кучка костылей:

  1. Сделать статический ArrayAdapter, т.е. (public/private/protected) static;
  2. Собирать List в первом Activity и передавать уже готовый List во второе Activity;
  3. Скрестить первый вариант с отдельно созданным для этого классом.
  4. Первый вариант провести в первом Activity и не придётся ничего передавать.

Ближе к хорошему решению:

  1. Сделать пустой Fragment без UI, согласно документации Google, и создавать/управлять/передавать необходимые Вам объекты.

Пример:

public class Price extends AppCompatActivity implements View.OnClickListener{
ListView lv;
private static ArrayList<computer> pers = new ArrayList<>();
computer p;
ArrayAdapter<computer> adapter;

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



    Bundle args =getIntent().getExtras();
    if (args !=null){
         p =(computer) args.getSerializable(computer.class.getSimpleName());
        lv=findViewById(R.id.lv);
        pers.add(new computer(p.getTitle(),p.getPrice()));
        System.out.println(pers);
        adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,pers);
        lv.setAdapter(adapter);



    }



    Button button = findViewById(R.id.button);
    button.setOnClickListener(this);

}
→ Ссылка