Se tivermos duas atividades:
- Lista de arquivos e hora da última modificação
- Atividade de edição de arquivo
Um usuário seleciona um arquivo da lista e é levado para a atividade de edição de arquivo. Ao terminar a edição, o usuário pressiona o botão Voltar para retornar à lista de arquivos.
A lista não é recarregada e, portanto, um valor incorreto é exibido para o tempo de modificação dos arquivos recém-editados.
Qual é o método adequado para fazer com que a lista de arquivos seja atualizada após o botão Voltar ser pressionado?
Este exemplo assume que nenhum banco de dados está sendo usado, apenas um ArrayAdapter.
Respostas:
Uma opção seria usar o onResume de sua primeira atividade.
@Override public void onResume() { // After a pause OR at startup super.onResume(); //Refresh your stuff here }
Ou você pode iniciar a Atividade para Resultado:
Intent i = new Intent(this, SecondActivity.class); startActivityForResult(i, 1);
Na secondActivity, se você deseja enviar dados de volta:
Intent returnIntent = new Intent(); returnIntent.putExtra("result",result); setResult(RESULT_OK,returnIntent); finish();
se você não quiser retornar dados:
Intent returnIntent = new Intent(); setResult(RESULT_CANCELED, returnIntent); finish();
Agora, em sua classe FirstActivity, escreva o seguinte código para o
onActivityResult()
métodoprotected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { if(resultCode == RESULT_OK){ //Update List } if (resultCode == RESULT_CANCELED) { //Do nothing? } } }//onActivityResult
fonte
onResume
não ligou para mim, alguma ideia do porquê? ( Eu tenteionRestart
eonPause
também, mas nenhum deles não ligou )Acho que onRestart () funciona melhor para isso.
@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 }
Você pode codificar o que deseja fazer quando a Activity for reiniciada (chamada novamente a partir do evento 'botão voltar pressionado') dentro de onRestart ().
Por exemplo, se você quiser fazer a mesma coisa que faz em onCreate (), cole o código em onRestart () (por exemplo, reconstruindo a IU com os valores atualizados).
fonte
no principal:
@Override public void onRestart() { super.onRestart(); finish(); startActivity(getIntent()); }
fonte
Eu recomendaria substituir o
onResume()
método na atividade número 1 e incluir código para atualizar seu adaptador de array, isso é feito usando[yourListViewAdapater].notifyDataSetChanged();
Leia isto se tiver problemas para atualizar a lista: Atualização da visualização de lista do Android
fonte
Se você deseja atualizar a atividade anterior, esta solução deve funcionar:
Na atividade anterior em que você deseja atualizar:
@Override public void onRestart() { super.onRestart(); // do some stuff here }
fonte
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(); } }
Eu só tenho a categoria de favoritos, então quando eu clico no item dos favoritos aparecem essas informações e se eu não gostar - este item deve ser excluído dos Favoritos: para isso eu atualizo o banco de dados e configuro para o adaptador (para reciclagem) [Desejo a você entenderá meu problema e solução]
fonte
@Override protected void onRestart() { super.onRestart(); finish(); overridePendingTransition(0, 0); startActivity(getIntent()); overridePendingTransition(0, 0); }
Na atividade anterior, use este código. Isso fará uma transição suave e recarregará a atividade quando você voltar, pressionando o botão Voltar.
fonte
Se não estiver lidando com um retorno de chamada da atividade de edição (com onActivityResult), prefiro colocar a lógica que você mencionou em onStart (ou possivelmente em onRestart), já que tê-lo em onResume parece um exagero, visto que as mudanças só ocorrem depois onStop.
De qualquer forma, esteja familiarizado com o ciclo de vida da atividade . Além disso, observe os métodos onRestoreInstanceState e onSaveInstanceState, que não aparecem no diagrama de ciclo de vida bonito.
(Além disso, vale a pena revisar como o Tutorial do Bloco de Notas trata o que você está fazendo, embora use um banco de dados.)
fonte
A melhor maneira de fazer isso é usando
Intent i = new Intent(this.myActivity, SecondActivity.class); startActivityForResult(i, 1);
fonte
Tente isto
public void refreshActivity() { Intent i = new Intent(this, MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); finish(); }
ou em fragmento
public void refreshActivity() { Intent i = new Intent(getActivity(), MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); finish(); }
E adicione este método ao seu onBackPressed () como
@Override public void onBackPressed() { refreshActivity(); super.onBackPressed(); } }
É isso aí...
fonte
@Override public void onBackPressed() { Intent intent = new Intent(this,DesiredActivity.class); startActivity(intent); super.onBackPressed(); }
fonte