при возвращении на первое 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 шт):
Кучка костылей:
- Сделать статический
ArrayAdapter, т.е.(public/private/protected) static; - Собирать
Listв первомActivityи передавать уже готовыйListво второеActivity; - Скрестить первый вариант с отдельно созданным для этого классом.
- Первый вариант провести в первом
Activityи не придётся ничего передавать.
Ближе к хорошему решению:
- Сделать пустой
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);
}