안드로이드 개발 Activity 호출하고 결과값을 받는 onActivityForResult 사용하는 방법 |
환경: Android Studio |
보통 Activity 를 이동할 때 결과를 리턴 받지 않는 startActivity() 함수를 사용합니다. 그런데 설정 화면처럼 이동한 화면에서 선택한 결과를 호출한 Activity 에서 리턴 받아야 하는 경우라면 어떤 함수를 사용해야 할까요? 답은 startActivityForResult() 입니다. 메인 Activity 에서 이동한 Activity 의 종료 결과를 받는 방법에 대해 알아 보겠습니다.
▼ Activity 이동할 때 결과값을 리턴 받지 않는 소스는 다음과 같습니다. Intent 와 startActivity() 사용해서 원하는 Activity 로 이동합니다.
public class OneActivity extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_one); Button btnSend = (Button) findViewById(R.id.btnSend); btnSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getApplicationContext(), TwoActivity.class); startActivity(intent); finish(); } }); } }
▼ 다음은 결과값을 받기 위한 호출할 startActivityForResult() 함수와 결과값을 받는 콜백함수 onActivityResult() 입니다. 호출할 메인 Activity 의 소스는 다음과 같습니다. startActivityForResult() 에서 두 번째 인수값인 0 은 호출한 Activity 에서 결과값이 없을 때 리턴되는 기본값입니다. 결과값을 받는 콜백 함수는 onActivityResult() 이며, resultCode 값을 받습니다.
public class OneActivity extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_one); Button btnSend = (Button) findViewById(R.id.btnSend); btnSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getApplicationContext(), TwoActivity.class); startActivityForResult(intent, 0); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Toast.makeText(getApplicationContext(), "ResultCode : " + resultCode, Toast.LENGTH_LONG).show(); } }
▼ 두 번째 호출 Activity 에서는 setResult() 함수로 반환할 결과값을 넣고 종료합니다. 그러면 호출한 Activity 에서는 resultCode 파라미터로 전달이 되겠죠.
public class TwoActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_two); setResult(100); finish(); } }
▼ 결과 화면은 다음과 같습니다. 버튼을 누르면 호출한 Activity 에서 전달받은 값을 토스트 메시지로 뿌립니다.
'안드로이드 개발' 카테고리의 다른 글
안드로이드(Android) 다양한 애니메이션 이동(translate) 을 구현하는 여러가지 방법 (0) | 2018.01.19 |
---|---|
안드로이드 개발 서비스 바인딩 (Service Bind) 예제 구현하는 방법 (0) | 2018.01.18 |
안드로이드 개발 레이아웃 인플레이션(LayoutInflater)으로 화면 구성하는 방법 (0) | 2018.01.04 |
안드로이드 개발 setId() 에러 Expected resource of type id 해결하는 방법 (0) | 2018.01.02 |
안드로이드 개발 서비스(Service) 컴포넌트 예제 구현하는 방법 (0) | 2017.12.27 |
안드로이드 개발 생성자 추가하는 방법, There is no default constructor available in (0) | 2017.12.23 |
안드로이드 개발 RelativeLayout 화면을 Java 소스에서 구현하는 방법 (0) | 2017.12.17 |
안드로이드 개발 No orientation specified, and the default is horizontal. This is a common source of bugs when children are added dynamically. 에러 해결 (0) | 2017.12.06 |