티스토리 뷰

실제 안드로이드 애플리케이션을 구성하다 보면 단순히 화면을 띄워 주는 것이 아니라 어떤 액티비티를 띄운건지 그리고 띄웠던 액티비티로 부터 응답을 받아 처리하는 일이 필요할 수 있다.


액티비티를 새로 띄우는 메서드

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
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday