본문 바로가기
[ Developer ]/Android

[Android] 안드로이드 Intent로 응답받기 인텐트

by 김현섭. 2016. 7. 11.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
Android Intent 보내고 Intent로 응답받기

우선 Android Studio에서 프로젝트를 생성한다
My App이라는 프로젝트를 생성한다
최소 ADK 버전은 16 젤리빈으로 진행한다

최소 지원 버전 같은 정보를 확인하려면 Gradle Scripts에서 build gradle에서 정보를 확인하면 된다



@ 실습 구성도
생성할 앱의 구성을 먼저 생각해보고 간다
우선 액티비티는 2개가 구성되어 있고 텍스트 입력창을 2개를 준다 그런 후 로그인과 회원 가입 버튼을 생성해준다
입력창에는 ID와 PW를 입력 받고 회원 가입 버튼을 누르게 되면 다음의 액티비티로 넘어가게 된다
3가지의 입력 창을 주고 완료 버튼과 취소 버튼을 준다
처음이 Email (ID)이고 두 세번째 입력 창은 비밀번호와 비밀번호 확인을 입력 받는다
취소를 누른다면 액티비티 종료를 시키고 완료를 누르면 이전의 호출한 액티비티로 이메일을 넣어준 후 액티비티를 종료시킨다


@ 실습
우선 activity_main에서 화면을 구성한다


Text Fields에서 Email과 Password를 추가한다
이제 스몰 버튼을 이용해서 버튼을 생성한다


이제 Text로 넘어가서 설정을 조금 바꿔준다


id를 Email과 Password로 변경을 해준다


버튼도 이름을 설정해준다
그런 후 모든 요소들을 가운데 정렬하기 위해서 레이아웃에 gravity를 Center로 준다


위와 같이 설정하면 요소들이 중앙 정렬된 것을 볼 수 있다


기존에 HTML에서 Input 타입에 placeholder와 같이 입력값을 힌트 주고 싶다면 hint를 사용하면 된다



실행 화면을 보면 input Type이 이메일 이라서 골뱅이가 자판에 있는 것을 볼 수 있다



@ 회원 가입 액티비티 생성
이제 회원 가입 액티비티를 생성한다


RegistActivity를 생성하면 layouy에서 activity_regist.xml도 자동으로 생성이 된다
그럼 이전에 한 것과 같이 화면을 먼저 구성해본다


Layouy을 Linear로 만들고 gravity와 orientation을 추가한다


우선 입력창을 3개 정도 생성한다


각각의 입력창에 id를 생성해준다
이제 버튼을 생성하기 위해서 LinearLayout안에서 LinearLayout을 이용해서 사용을 하면 된다

그런 후 디자인을 확인해 보면 작은 박스가 생성된 것을 볼 수 있다


이제 버튼을 저 안에 붙여넣으면 된다


그러면 옆에 붙게된다


그런 후 입력창에 힌트와 버튼의 id 내용을 입력해준다


layout_weight를 1로 주면 1:1 비율로 공간 만큼 들어가게 된다

이제 Main에서 회원가입 버튼을 누르면 RegistActivity를 불러오게끔 로직을 작성하면 된다


버튼을 우선 변수로 선언하고 버튼을 받아와서 이벤트를 설정해준다
데이터를 보내고 결과값을 받아오기 위해서 startActivityForResult를 사용하면 된다
1000은 요청의 식별자이다

*MainActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MainActivity extends AppCompatActivity {
 
    private Button btnRegist;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        btnRegist = (Button) findViewById(R.id.btnRegist);
        btnRegist.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), RegistActivity.class);
                startActivityForResult(intent, 1000);
            }
        });
    }
}
cs

결과 화면을 보면 회원가입 버튼을 눌렀을 때 넘어가는 것을 볼 수 있다


이제 RegistActivity에 가서 로직을 작성한다 우선 요소들을 모두 가져오는 로직을 작성해준다


이제 캔슬 버튼을 누르면 종료되게 로직을 처리하면 된다


이제 btnDone에 대한 로직을 처리해야 한다
완료를 눌렀을 때 인텐트를 Main에 응답을 하는 것이다


btnDone은 우선 Intent를 생성하고 email을 보내면 된다
보낼 때 getText의 toString을 보내는 이유는 getText가 Editable이기 때문이다


위와 같이 작성해주면 email을 보내고 setResult로 RESULT_OK 즉 성공했다는 코드와 인텐트를 보내고 종료시키면 된다

*RegistActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class RegistActivity extends AppCompatActivity {
 
    private EditText etEmail;
    private EditText etPassword;
    private EditText etPasswordConfirm;
    private Button btnDone;
    private Button btnCancel;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_regist);
 
        etEmail = (EditText) findViewById(R.id.etEmail);
        etPassword = (EditText) findViewById(R.id.etPassword);
        etPasswordConfirm = (EditText) findViewById(R.id.etPasswordConfirm);
        btnDone = (Button) findViewById(R.id.btnDone);
        btnCancel = (Button) findViewById(R.id.btnCancle);
 
        btnCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
 
        btnDone.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
 
                // 응답 보내기
                Intent result = new Intent();
                result.putExtra("email", etEmail.getText().toString());
 
                // RESULT_OK = 성공
                setResult(RESULT_OK, result);
                finish();
            }
        });
    }
}
cs

그러나 실행을 해보면 Email이 입력되있지 않을 것이다 이유는 보내고 받지 않았기 때문인데
받아주는 로직을 Main에서 작성 해주면 된다

받기 위해서 onActivityResult를 생성해준다



메소드에서 requestCode는 요청했던 코드 즉 1000이고 resultCode는 RESULT_OK data는 인텐트인 result가 넘어오게 된다
그러면 메소드 내부에서 onAcitivyResult를 실행하게 된다
우선 코드들이 잘왔나 확인하기 위해서 Log를 이용해서 확인을 해본다


그런 후 실행을 해본다 실행 후 회원가입을 눌러서 1234라는 임시의 이메일을 입력해본다


그럼 로그에 위와 같이 찍힌 것을 확인할 수 있다
1000은 requestCode이고 -1은 resultCode -1이면 성공했다는 의미와 result 인텐트의 값인 1234가 오게 된다


그런 후 위의 코드와 같이 코드를 비교해서 성공 유부를 가리고 Toast와 버튼에 setText를 해주면 된다
버튼은 위에서 변수 선언하고 가져오면 된다

결과를 보면 다음과 같다