본문 바로가기

Android

[Android] 여러 Activity 사용하기

안드로이드 앱 은 하나의 화면에서 모두 처리하지 못하고

다른 화면에서 처리하거나 결과에 따라 다른 화면을 보여줄 필요가 있다.

간단한 예시로

계산기 프로그램에서

실제 계산을 해주는 것은 다른 Activity에서 처리하고 결괏값을 mainActivity로 돌려주면

MainActivity에서 결괏값을 받아 출력할 것이다.

간단히 텍스트에 숫자를 입력하고

버튼을 통해 더하기, 빼기, 나누기, 곱하기를 누르고

결과 버튼을 누르면 결괏값을 보여줄 것이다.

public void onButtonClicked(String num1, String num2 , int flag){
        Intent intent = new Intent(getApplicationContext() , CalActivity.class);
        
        inum1 = Integer.parseInt(num1);
        inum2 = Integer.parseInt(num2);
        intent.putExtra("inum1",inum1);
        intent.putExtra("inum2",inum2);
        intent.putExtra("flag",flag);
        setResult(RESULT_OK , intent);

        startActivityForResult(intent , 0);

    }

각 버튼을 누르면 이 메서드를 호출하게 되는데 결괏값을 만들기 위한 연산은 여기서 하지 않고

다른 Activity에서 처리할 것이다.

Intent를 이용하여 다른 Activity를 사용하게 되는데 이때 사용하는 것은 CalActivity이다.

getApplicationContext() ==자신이 동작중인공간에서

CalActivity.class == 이곳으로 찾아간다.

putExtra()는 다른 Activity에게 보낼 데이터를 키의 형태로 보내게 되는데 앞에는 키의 이름이고 뒤에는 실제 값이 들어간다.

그리고 모든 값을 담았다면

setResutl()를 사용하여 원하는 곳으로 보낸다.

startActivityForResult(intent , 0); 이제 띄워달라.

 Intent intent = getIntent();
 int num_1 =intent.getIntExtra("inum1" ,0);
 int num_2 =intent.getIntExtra("inum2",0);
 int re_flag =intent.getIntExtra("flag",0);
 ------------------생략---------------------
 intent.putExtra("result",result); <---결과
 setResult(RESULT_OK , intent);
 finish();

getIntent()를 이용하여 보내준 정보를 받는다.

그 정보 안에 있는 값들을 키를 이용하여

getIntExtra()를 이용하여 정수를 변수로 받아낸다.

이때 매개변수로 뒤의 0은 기본값으로 1 ,2 ,3 어느걸 넣어도 상관없지만

기본적으로 변수에 아무것도 들어있지않을때 기본값으로 적용되는 역활을한다.

그리고 똑같이 다시 MainActivity로 보내기 위해

putExtra()에 결괏값을 넣어주고

setResult()로 보내준다. 이때 정상적으로 보내졌다라는것을 RESULT_OK 로 알린다.

finish()는 현재 액티비티는 이제 사용할 필요 없으니 제거한 것이다.

이제 돌려준 값을 다시 받아보자.

Result로 메시지가 도달했을 때 받기 위해

메서드를 추가해줘야 한다.

메서드를 추가할 곳에 마우스 우 클릭

onActivityResult를 클릭하는데 메서드가 매우 많아 찾기 힘드니 검색하는 것처럼 입력하면 그에 맞는 메서드를 찾아준다.

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode ==RESULT_OK){
            int result =data.getIntExtra("result",0);
            tvResult.setText("결과 :"+result);
        }
    }

CalActivity에서 RESULT_OK라는 메시지가 왔기 때문에 if 문으로 잘 전달되었는지 확인 후

똑같은 방법으로 전달해준 값을 받아 출력하는 모습이다.