티스토리 뷰
실제 안드로이드 애플리케이션을 구성하다 보면 단순히 화면을 띄워 주는 것이 아니라 어떤 액티비티를 띄운건지 그리고 띄웠던 액티비티로 부터 응답을 받아 처리하는 일이 필요할 수 있다.
액티비티를 새로 띄우는 메서드
startActivity (Intent intent) startActivityForResult (Intent intent, int requestCode)
startActivity 메서드
- 타 액티비티를 호출한다.
- 타 액티비티에 필요한 값을 전달할 수 있지만, 다시 응답 받을 수 없다.
startActivityforResult 메서드
- 타 액티비티를 호출한다.
- 값을 전달하고, 다시 응답 받을 수 있다.
- 첫번째 인자에는 Intent객체를 넣고, 두번째 인자에는 요청 코드를 넣는데.. 이 숫자는 호출하는 액티비티를 구분할 목적의 정수형 값을 집어 넣되 중복되지 않아야 한다.
- activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/root" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.choonie.page213application.MainActivity"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:onClick="activityResult" android:text="화면" android:textSize="25dp" /> <LinearLayout android:id="@+id/linear" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/button" android:orientation="vertical"> </LinearLayout> </RelativeLayout>
- MainActivity.java
public class MainActivity extends AppCompatActivity { public static final int ACTIVITY_DISTINCT_NUMBER = 1404; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void activityResult(View v) { Intent intent = new Intent(this, TwoActivity.class); startActivityForResult(intent, ACTIVITY_DISTINCT_NUMBER); } protected void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); if (requestCode == ACTIVITY_DISTINCT_NUMBER) { Toast.makeText(this, "onActivityResult 호출. 요청코드 " + requestCode + " 결과코드 " + resultCode, Toast.LENGTH_LONG).show(); if (resultCode == RESULT_OK) { String name = intent.getExtras().getString("name"); Toast.makeText(this, "응답으로 전달된 name " + name, Toast.LENGTH_LONG).show(); } } } }
버튼을 눌렀을 때 activityResult메서드를 수행하며, 새로운 액티비티 화면을 불러온다.
새로운 액티비티 화면이 종료되고 원래의 액티비티로 돌아올 때 onActivityResult 메서드가 수행된다.
- activity_two.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.choonie.page213application.TwoActivity"> <Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="액티비티투"/> </RelativeLayout>
- TwoActivity.java
public class TwoActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_two); Button b = (Button) findViewById(R.id.button); b.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(); intent.putExtra("name", "helen keler"); setResult(RESULT_OK, intent); finish(); } }); } }
버튼을 누르면 인텐트를 생성하고 데이터를 넣는다. setResult 메서드를 통해서 액티비티(TwoActivity)를 호출한 액티비티(MainActivity) 측에 인텐트 응답데이터를 보내고 finish()로 이(TwoActivity) 액티비티를 닫는다.
-결과화면
화면 버튼을 누르면 아래처럼 액티비티투 화면이 뜨고
액티비티투 버튼을 누르면 이 화면이 종료되고
호출한 화면으로 돌아오면서 요청,응답데이터가 전달된다.
'Android > 정리' 카테고리의 다른 글
액티비티가 쌓이는 스택과 플래그 (0) | 2016.05.12 |
---|---|
인텐트 (0) | 2016.05.10 |
레이아웃 인플레이션 (0) | 2016.05.09 |
FrameLayout 프레임레이아웃 (0) | 2016.05.03 |
TableLayout 테이블레이아웃 (0) | 2016.05.03 |