[android] 뒤로 버튼 및 이전 활동 새로 고침
두 가지 활동이있는 경우 :
- 파일 목록 및 마지막 수정 시간
- 파일 편집 활동
사용자가 목록에서 파일을 선택하고 파일 편집 활동으로 이동합니다. 편집이 완료되면 사용자는 뒤로 버튼을 눌러 파일 목록으로 돌아갑니다.
목록이 다시로드되지 않으므로 방금 편집 한 파일 수정 시간에 대해 잘못된 값이 표시됩니다.
뒤로 버튼을 누른 후 파일 목록을 새로 고치는 적절한 방법은 무엇입니까?
이 예에서는 사용중인 데이터베이스가없고 ArrayAdapter 만 있다고 가정합니다.
답변
한 가지 옵션은 첫 번째 활동의 onResume을 사용하는 것입니다.
@Override
public void onResume()
{ // After a pause OR at startup
super.onResume();
//Refresh your stuff here
}
또는 결과에 대한 활동을 시작할 수 있습니다.
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
답변
나는 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 () 내에서 Activity가 다시 시작될 때 ( ‘뒤로 버튼 누름’이벤트에서 다시 호출 됨) 수행 할 작업을 코딩 할 수 있습니다.
예를 들어 onCreate ()에서하는 것과 동일한 작업을 수행하려면 onRestart ()에 코드를 붙여 넣습니다 (예 : 업데이트 된 값으로 UI 재구성).
답변
요점 :
@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);
}
이전 활동에서이 코드를 사용하십시오. 이것은 부드럽게 전환하고 뒤로 버튼을 눌러 돌아올 때 활동을 다시로드합니다.