Кнопка "Назад" и обновление предыдущей активности
Если у нас есть два действия:
- Список файлов и последнее изменение времени
- Действия по редактированию файлов
Пользователь выбирает файл из списка и переходит к активности редактирования файла. По завершении редактирования пользователь нажимает кнопку "Назад", чтобы вернуться к списку файлов.
Список не перезагружается, и поэтому отображается измененное время только что отредактированных файлов.
Каков надлежащий метод обновления списка файлов после нажатия кнопки "Назад"?
В этом примере предполагается, что база данных не используется, просто ArrayAdapter.
Ответы
Ответ 1
Один из вариантов заключается в использовании 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
Ответ 2
Я думаю, что 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
}
Вы можете указать, что вы хотите сделать, когда действие перезапущено (снова вызвано нажатием кнопки "назад" ) внутри onRestart().
Например, если вы хотите сделать то же самое, что и в onCreate(), вставьте код в onRestart() (например, восстановите пользовательский интерфейс с обновленными значениями).
Ответ 3
в основном:
@Override
public void onRestart()
{
super.onRestart();
finish();
startActivity(getIntent());
}
Ответ 4
Я бы рекомендовал переопределить метод onResume()
в действии номер 1, а там включить код для обновления вашего адаптера массива, это делается с помощью [yourListViewAdapater].notifyDataSetChanged();
Прочтите это, если у вас возникли проблемы с обновлением списка: Обновление просмотра списка Android
Ответ 5
Если вы хотите обновить предыдущую активность, это решение должно работать:
В предыдущем действии, в котором вы хотите обновить:
@Override
public void onRestart()
{
super.onRestart();
// do some stuff here
}
Ответ 6
Если не обрабатывать обратный вызов из действия редактирования (с помощью onActivityResult), я бы предпочел поставить логику, о которой вы говорили в onStart (или, возможно, в onRestart), поскольку наличие ее в onResume просто кажется излишним, учитывая, что изменения только после onStop.
Во всяком случае, ознакомьтесь с жизненным циклом активности. Кроме того, обратите внимание на методы onRestoreInstanceState и onSaveInstanceState, которые не отображаются на диаграмме довольно жизненного цикла.
(Кроме того, стоит рассмотреть, как Учебник по блокноту обрабатывает то, что вы делаете, хотя он использует базу данных.)
Ответ 7
Лучше всего думать, что он использует
Intent i = new Intent(this.myActivity, SecondActivity.class);
startActivityForResult(i, 1);
Ответ 8
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) [ Я хочу, чтобы вы поняли мою проблему и решение]
Ответ 9
Попробуйте это
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();
}
}
Вот так...
Ответ 10
@Override
public void onBackPressed() {
Intent intent = new Intent(this,DesiredActivity.class);
startActivity(intent);
super.onBackPressed();
}