[android] 뒤로 버튼 및 이전 활동 새로 고침

두 가지 활동이있는 경우 :

  1. 파일 목록 및 마지막 수정 시간
  2. 파일 편집 활동

사용자가 목록에서 파일을 선택하고 파일 편집 활동으로 이동합니다. 편집이 완료되면 사용자는 뒤로 버튼을 눌러 파일 목록으로 돌아갑니다.

목록이 다시로드되지 않으므로 방금 편집 한 파일 수정 시간에 대해 잘못된 값이 표시됩니다.

뒤로 버튼을 누른 후 파일 목록을 새로 고치는 적절한 방법은 무엇입니까?

이 예에서는 사용중인 데이터베이스가없고 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);
}

이전 활동에서이 코드를 사용하십시오. 이것은 부드럽게 전환하고 뒤로 버튼을 눌러 돌아올 때 활동을 다시로드합니다.