Arti-Jack
@Arti-Jack

Как решить проблему с обновлением List Adapter и ListView?

Пытаюсь сделать приложение, где есть список элементов (ListView) и у каждого элемента из списка есть два значения. При нажатии на этот список появляется новое окно (Intent), где можно поменять поля. И если после этого перейти на предыдущее активити, то поля у элементов, естественно, должны меняться.

Я пытался сделать это с помощью ListView и реализацией собственного адаптера.
Так же есть некая сущность как Cash:
public class Cash {

    private static HashMap<String, Integer> TABLE = new HashMap<>();
    private int coast;
    private int income;
    private int id;
    private String name;
 
    public Cash(int coast, int income, int id, String name) {
        this.coast = coast;
        this.income = income;
        this.id = id;
        this.name = name;
    }

    public int getCoast() {
        return coast;
    }

    public int getIncome() {
        return income;
    }

    public int getId() {
        return id;
    }

    ...
   
}


И в слушателях к моему адаптеру я делаю следующее:

Я загружаю элемент списка и адаптер
FillingCashSettings.init(cashList.get(position), cashListAdapter); // тут загружается конкретная сущность ну и адаптер в придачу, чтобы проводить с ним некие манипуляции

И Intent`ом вызываю активность FillingCashSettings в надежде заполнить значения.
intent = new Intent(getApplicationContext(), FillingCashSettings.class);
          startActivity(intent);


Вот весь код onCreate`а:
@Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cash_settings);

        listView = (ListView) findViewById(R.id.cashListView);
        cashList = new ArrayList<>();
        cashSettings = new FillingCashSettings();

        // Закрепляем слушателя на listView
        for (int i = 0; i < settings.length; i++) {
            cashList.add(new Cash(0, 0, i, settings[i]));
        }

        cashListAdapter = new CashListAdapter(getApplicationContext(), cashList);
        listView.setAdapter(cashListAdapter);

        // Закрепление хэндлеров
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(
                        getApplicationContext(),
                        "clicked " + view.getTag(),
                        Toast.LENGTH_SHORT
                ).show();

                FillingCashSettings.init(cashList.get(position), cashListAdapter);
                intent = new Intent(getApplicationContext(), FillingCashSettings.class);
                startActivity(intent);
            }
        });


Затем в хэндлере кнопки я пытаюсь поменять значение у ранее загруженной сущности
enterButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String income = editText.getText().toString();
                cash.setIncome(Integer.parseInt(income));
                Toast.makeText(getApplicationContext(), cash.getName() + cash.getIncome(), Toast.LENGTH_LONG).show();
            }
        });


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

И хочу сразу сказать, что я пробовал даже notifyDataSetChanged(), но не помогло.

Вот скрин самого приложения:
b6d3583ef7e042018e9e76b778c393a9.png

Как мне сделать так, чтобы ListView обновлялся?

PS: Хочу сразу сказать, что я очень слаб в андройде, так как только начал его изучать, поэтому рассчитываю на ваше понимание!
  • Вопрос задан
  • 271 просмотр
Пригласить эксперта
Ответы на вопрос 1
73656c6565
@73656c6565
أنتوني
На сколько понял нужно между активити передавать значения, это делается по ключу.
Ссылка на урок.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы