Обновление данных на активности

Ситуация. У вас есть, к примеру, окно со списком.

@Override
public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_list);
	list = (ListView)findViewById(R.id.list);
 
	ArrayAdapter adapter = new ArrayAdapter(this, 0, array);
	list.setAdapter(adapter);
	list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
		public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
			Intent intent = new Intent(mContext, EditActivity.class);
			startActivity(intent);
		}
	});
}

По нажатию на элемент списка у нас открывается редактирование элемента. Всё отредактировали. Возвращаемся обратно и видим, что никаких изменений у нас в списке не произошло. Это происходит потому, что жизненный цикл приложения в Android идёт таким образом (в данном случае. Вообще схема там побольше) : onCreate -> onPause -> onResume.

При возвращении на активность вызывается onResume, а не onCreate. А значит, чтобы список у нас обновился, нам нужно обновить данные в onResume тоже.

С другой стороны можно при переходе на другую активность вызывать finish() у текущей, чтобы каждый раз при возврате на неё onCreate вызывался заново.

 

Читайте также:

комментариев 6

  1. Андрей:

    Позор какой-то. Отписываюсь от блога.
    Самый простой вариант — вызывать в onActivityResult
    adapter.notifyDataSetChanged()

    • beowulf13th:

      Я знаю этот вариант, но в данном случае мне это не нужно ;)

      • Андрей:

        Почему? onActivityResult вызовется как раз тогда, когда мы закончим редактировать элемент.

        • beowulf13th:

          Во-первых, он не всегда сработает. На stackoverflow народ много на эту тему матерится. Если возвращаться по кнопке Back, то да, сработает 100%.

          Во-вторых, это нужно дёргать startActivityForResult, переопределять onActivityResult, а если есть уже onResume, в котором что-то делается (к примеру запускается геолокация), то делать onActivityResult в таком простом примере Я не вижу смысла

          • Андрей:

            Ну ладно, согласен. Просто не нужно называть это подвохом, это азы Android. Подвох — это когда моё приложение не работает на некоторых девайсах с кастомными (или китайскими) прошивками (а мне каждый юзер очень важен)

            • beowulf13th:

              Ок, сейчас подправлю :)

              Насчёт кастомных — это жесть, согласен. У меня в MIUI не работает корректно приложение. Причём не понятно почему, в logcat’e всё ок :( debug’ом тоже ничего не ищется :(

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *