2011-07-27 6 views
7

나는 내 인생을 위해 뒤로 버튼을 누른 후 활동을 새로 고치는 방법을 알아낼 수 없다. 나는 현재 B로 이동하기위한 의도로 A 액티비티를 가지고 있고, B 액션을 다시 누르면 A 액트로 돌아가고 싶지만 스스로 새로 고침하고 싶습니다. 저는 현재 활동을 새로 고치려면이 의도를 사용할 수 있습니다onResume()을 사용하여 활동 새로 고침

Intent refresh = new Intent(this, Favorites.class); 
    startActivity(refresh); 
    this.finish(); 

하지만 제대로 돌아가는 후 내 행동 A를 새로 고치려면 onResume() 함수를 사용하는 방법을 알아낼 수 없습니다.

+1

현재 refresh 스키마가 작동하는 이유는 표준 launchMode에서 활동을 실행하고 있기 때문입니다. 즉, startActivity (새로 고침)을 호출 할 때마다 액티비티 A의 새 인스턴스가 생성됩니다. 새 인스턴스가 각각 onCreate()를 거쳐 불필요한 인스턴스를 생성하면 액티비티가 새로 고쳐집니다. 이 작업을 올바르게 수행하려면 실제로 활동을 "새로 고침"하고 onResume()으로 이동하는 onCreate() 코드를 식별해야합니다. Ovidiu는 아래에서 제안했습니다. – glorifiedHacker

답변

10

ActivityB에서 돌아 오는 때 ActivityA의 특별한 행동을해야 할 경우, 당신에게 새로 고칠 수 있습니다 Activity A 재정이 onActivityResult(int requestCode, int resultCode, Intent data)

에 다음 Activity A

에서 Activity B를 시작합니다 startActivity(Intent intent) 대신 startActivityForResult(Intent intent, int requestCode)을 사용해야합니다.

startActivityForResult(new Intent(this, ActivityB.class), REQUEST_CODE); 

이렇게하면 onActivityResult(int requestCode, int resultCode, Intent intent)를 오버로드 ActivityAActivityB의 종료를 감지 할 수있을 것입니다 : 당신은 뒤로 가기 버튼의 언론 ActivityB을 종료하는 경우에도

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent); 

    if (requestCode == REQUEST_CODE) { 
     doRefresh(); // your "refresh" code 
    } 
} 

이 작동합니다. 이 경우 resultCode은 기본값으로 RESULT_CANCELLED입니다.

1

onResume() 방법으로 활동 UI를 업데이트하는 코드를 배치해야합니다. 어쩌면 코드를 더 게시하거나 정확히 무엇을 업데이트하려고하는지 설명해야합니다.

+0

데이터베이스에서 검색된 5 개의 문자열이 포함 된 listview가 포함 된 활동이 있습니다. BackService 메소드를 사용하여 실행중인 경우 즉, 데이터베이스에 변경 사항이있는 경우 문자열로 새 알림을 받게됩니다. 해당 알림을 클릭하면 목록보기에 해당 문자열도 포함되어야합니다. OnResume()이 그렇게 할 수있게 할 것인가? – suraj

3

사용 startActivityForResult(intent, requestCode); 당신이 당신의 Activity A