Если у нас есть два вида деятельности:
- Список файлов и время последнего изменения
- Действия по редактированию файлов
Пользователь выбирает файл из списка и переходит к операции редактирования файла. По завершении редактирования пользователь нажимает кнопку «Назад», чтобы вернуться к списку файлов.
Список не перезагружается, поэтому отображается неверное значение времени изменения только что отредактированных файлов.
Каков правильный метод обновления списка файлов после нажатия кнопки «Назад»?
В этом примере предполагается, что база данных не используется, а только ArrayAdapter.
Ответы:
Один из вариантов - использовать onResume вашего первого действия.
@Override public void onResume() { // After a pause OR at startup super.onResume(); //Refresh your stuff here }
Или вы можете начать Activity for Result:
Intent i = new Intent(this, SecondActivity.class); startActivityForResult(i, 1);
В secondActivity, если вы хотите отправить данные:
Intent returnIntent = new Intent(); returnIntent.putExtra("result",result); setResult(RESULT_OK,returnIntent); finish();
если вы не хотите возвращать данные:
Intent returnIntent = new Intent(); setResult(RESULT_CANCELED, returnIntent); finish();
Теперь в вашем классе FirstActivity напишите следующий код для
onActivityResult()
методаprotected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { if(resultCode == RESULT_OK){ //Update List } if (resultCode == RESULT_CANCELED) { //Do nothing? } } }//onActivityResult
источник
onResume
не звоните мне, знаете, почему? ( Я пробовалonRestart
иonPause
тоже, но никто из них не звонил )Я думаю, что onRestart () лучше подходит для этого.
@Override public void onRestart() { super.onRestart(); //When BACK BUTTON is pressed, the activity on the stack is restarted //Do what you want on the refresh procedure here }
Вы можете закодировать то, что хотите сделать, когда Activity перезапускается (вызывается снова из события «нажата кнопка возврата») внутри onRestart ().
Например, если вы хотите сделать то же самое, что и в onCreate (), вставьте код в onRestart () (например, реконструируйте пользовательский интерфейс с обновленными значениями).
источник
в основном:
@Override public void onRestart() { super.onRestart(); finish(); startActivity(getIntent()); }
источник
Я бы порекомендовал переопределить
onResume()
метод в действии номер 1 и включить в него код для обновления адаптера массива, это делается с помощью[yourListViewAdapater].notifyDataSetChanged();
Прочтите это, если у вас возникли проблемы с обновлением списка: Обновление представления списка Android
источник
Если вы хотите обновить предыдущее действие, это решение должно работать:
В предыдущем упражнении, где вы хотите обновить:
@Override public void onRestart() { super.onRestart(); // do some stuff here }
источник
private Cursor getAllFavorites() { return mDb.query(DocsDsctnContract.DocsDsctnEntry.Description_Table_Name, null, null, null, null, null, DocsDsctnContract.DocsDsctnEntry.COLUMN_Timest); } @Override public void onResume() { // After a pause OR at startup super.onResume(); mAdapter.swapCursor(getAllFavorites()); mAdapter.notifyDataSetChanged(); } public void swapCursor(Cursor newCursor){ if (mCursor!=null) mCursor.close(); mCursor = newCursor; if (newCursor != null){ mAdapter.notifyDataSetChanged(); } }
У меня просто есть категория избранного, поэтому, когда я нажимаю на элемент из избранного, появляется такая информация, и если мне не нравится - этот элемент должен быть удален из избранного: для этого я обновляю базу данных и устанавливаю ее на адаптер (для recyclerview) [желаю вам поймет мою проблему и решение]
источник
@Override protected void onRestart() { super.onRestart(); finish(); overridePendingTransition(0, 0); startActivity(getIntent()); overridePendingTransition(0, 0); }
В предыдущем упражнении используйте этот код. Это сделает плавный переход и перезагрузит активность, когда вы вернетесь, нажав кнопку «Назад».
источник
Если не обрабатывать обратный вызов из действия редактирования (с onActivityResult), я бы предпочел поместить логику, которую вы упомянули в onStart (или, возможно, в onRestart), поскольку наличие ее в onResume просто кажется излишним, учитывая, что изменения происходят только после onStop.
Во всяком случае, ознакомьтесь с жизненным циклом Activity . Кроме того, обратите внимание на методы onRestoreInstanceState и onSaveInstanceState, которые не отображаются на красивой диаграмме жизненного цикла.
(Также стоит посмотреть, как Notepad Tutorial обрабатывает то, что вы делаете, хотя и использует базу данных.)
источник
Думаю, лучший способ сделать это - использовать
Intent i = new Intent(this.myActivity, SecondActivity.class); startActivityForResult(i, 1);
источник
Попробуй это
public void refreshActivity() { Intent i = new Intent(this, MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); finish(); }
или во фрагменте
public void refreshActivity() { Intent i = new Intent(getActivity(), MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); finish(); }
И добавьте этот метод в свой onBackPressed (), например
@Override public void onBackPressed() { refreshActivity(); super.onBackPressed(); } }
Это оно...
источник
@Override public void onBackPressed() { Intent intent = new Intent(this,DesiredActivity.class); startActivity(intent); super.onBackPressed(); }
источник