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

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

Войти через центр авторизации
Похожие вопросы