_/Android

[Android] 버튼 클릭 시 화면 전환하기(startActivityForResult() 사용법)

suzin 2020. 9. 7. 04:31

앱에서 화면전환은 거의 필수적이라고 할 수 있는데요, 오늘은 새로운액티비티(Activity)를 띄우고 결과를 처리하는 예제를 통해 화면전환을 해보겠습니다.

 

 

 

 

액티비티를 띄워 화면에 보이도록 하려면 startActivity() 메서드startActivityForResult() 메서드를 사용하면 됩니다.

 

startActivity() 메서드는 단순히 액티비티를 띄워 화면에 보이도록합니다.

startActivityForResult() 메서드는 어떤 액티비티를 띄운 것인지 그리고 띄웠던 화면을 닫고 원래의 메인 화면으로 돌아오면서 응답을 받아 처리합니다. 

 

startActivityForResult(intent intent, int requestCode)

 

startActivityForResult() 메서드에서 전달되는 파라미터는 인텐트(intent)와 정수로 된 코드 값(requestCode)인데,

인텐트(intent)는 앱 구성 요소 간에 작업 수행을 위한 정보를 전달하는 역할코드 값은 각각의 액티비티를 구별하기 위해 사용됩니다. 

 

 

다음은 startActivityForResult() 메서드를 사용해 새로운 액티비티를 띄우고 응답을 받는 예제입니다.

 

[app]에서 오른쪽 버튼 New → Activity → Empty Activity 

일단 원래 액티비티에서 전환될 새로운 액티비티(SubActivity)를 생성해 줍니다.

 

 

1. 새로운 액티비티 띄우기

 

// MainActivity.java
public class MainActivity extends AppCompatActivity {
	public static final int REQUEST_CODE = 101;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
                startActivityForResult(intent,REQUEST_CODE); // 액티비티 띄우기
            }
        });
    }
   

 

startActivityForResult() 메서드를 이용해 새로운 액티비티를 띄어줍니다.

 

REQUEST_CODE는 새 액티비티를 띄울 때 보낼 요청코드로서 이 값은 나중에 새 액티비티로부터 응답을 받을 때 다시 전달받습니다. 

 

 

2. 원래 액티비티로 돌아가기

 

// SubActivity.java
public class SubActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sub);

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(); // 인텐트 객체 생성하고
                intent.putExtra("name", "suzin"); // 인텐트 객체에 데이터 넣기

                setResult(RESULT_OK, intent); // 응답 보내기
                finish(); // 현재 액티비티 없애기
            }
        });
    }
}

 

setResult(응답 코드, 인텐트) 메서드는 새로 띄운 액티비티에서 이전 액티비티로 응답코드와 인텐트를 전달해 줍니다.

finish() 메서드는 액티비티를 화면에서 없애고 싶을 때 사용합니다.

 

 

3. 원래 액티비티에서 응답 처리하기

 

// MainActivity.java
@Override
    // SubActivity에서 MainActivity로 돌아올 때 호출 된다.
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // 요청 코드에 따라 어떤 화면인지 구별할 수 있다.
        if(requestCode == 101){
            if(data != null){
                String name = data.getStringExtra("name");
                if(name != null){
                    Toast.makeText(this, "응답으로 받은 데이터 : "+ name, Toast.LENGTH_LONG).show();
                }
            }
        }
    }
}

 

 

MainActivity에 SubActivity로 부터 받은 응답을 처리하는 메서드 추가해 줍니다. 

 

onActivityResult(int requestCode, int resultCode, Intent data) 메서드는 새로 띄웠던 서브 액티비티가 응답을 보내오면 그 응답을 처리하는 역할을 합니다.

 

첫번째 파라미터(requestCode) : 액티비티를 띄울 때 전달했던 요청코드, 이 값으로 어떤 액티비티로부터 응답을 받은 것인지 구분할수 있다.

두번째 파리미터(resultCode) : 새 액티비티로부터 전달된 응답코드, 새 액티비티에서 처리한 결과가 정상인지 아닌지를 구분하는데 사용된다.

세번째 파리미터(data) : 새 액티비티로부터 전달 받은 액티비티

 

 

4. 실행화면

 

1. MainActivity
2. SubActivity
3. MainActivity

'_ > Android' 카테고리의 다른 글

[Android] 플래그(Flag) 사용하기  (1) 2020.09.08
[Android] 토스트(Toast) 메시지 이용하기  (2) 2020.08.27