본문 바로가기
개발/Android

안드로이드 스튜디오 addTextChangedListener를 이용한 로그인 로직

by 윤호 2019. 11. 26.

이번에는 저번 로그인 화면에서 로그인 버튼이 email과 password가 맞을 경우에만 눌리도록 해보겠습니다.

DB를 활용하지 않으니 emailOK와 passwordOK를 선언해서 사용자가 입력한 값이 이와 같으면 작동하도록 해봤습니다.

 

이번 코딩의 핵심은 EditText의 addTextChangedListener인데 로그를 보면 EditText에 값이 변할때마다 로그가 찍힙니다.

emil과 password의 값이 바뀔때 마다 inputEmail, inputPassword에 담고 validation에서 이 값이 emailOK와 passwordOK 같은지 확인하고 값이 같으면 RelativeLayout_login.setEnabled(true)해줍니다.

그전에 먼저 RelativeLayout_login.setEnabled(true)를 해줘야겠죠?

 

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
 
 
public class MainActivity extends AppCompatActivity {
 
    TextInputEditText TextInputEditText_email, TextInputEditText_password;
    RelativeLayout RelativeLayout_login;
 
    String emailOK= "ahn3330@naver.com";
    String passwordOK="1111";
    String inputEmail = "";
    String inputPassword = "";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); //activity 매칭
 
 
        //1. 값을 가져온다 - 검사 (ahn3330@naver.com / 1111)
        //2. 클릭을 감지한다
        //3. 1번의 값을 액티비티로 넘긴다
 
        TextInputEditText_email = findViewById(R.id.TextInputEditText_email); //activity_main에서 해당 id를 가져옴
        TextInputEditText_password = findViewById(R.id.TextInputEditText_password);
        RelativeLayout_login = findViewById(R.id.RelativeLayout_login);
 
        RelativeLayout_login.setEnabled(false);
        TextInputEditText_email.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
 
            }
 
            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                //Log.d("addTextChangedListener", charSequence.toString());
                if(charSequence != null) {
                    inputEmail = charSequence.toString();   // charSequnece가 null이면 에러가 날수도
                    RelativeLayout_login.setEnabled(validation());
                }
            }
 
            @Override
            public void afterTextChanged(Editable editable) {
 
            }
        });
 
        TextInputEditText_password.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
 
            }
 
            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                if(charSequence != null) {
                    inputPassword = charSequence.toString();
                    RelativeLayout_login.setEnabled(validation());
                }
            }
 
            @Override
            public void afterTextChanged(Editable editable) {
 
            }
        });
 
        RelativeLayout_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {    //클릭시
                String email = TextInputEditText_email.getText().toString();        //text값을 String으로 변환하여 가져오기
                String password = TextInputEditText_password.getText().toString();  //getText가 Editable로 가져오기 때문에
                                                                                    //String으로 변환해준다
                //LoginResultActivity로 값을 전달하고 이동하기 위한 작업
                Intent intent = new Intent(MainActivity.this, LoginResultActivity.class);
                intent.putExtra("email", email);    //값 전달
                intent.putExtra("password", password); //값 전달
                startActivity(intent);  //다음 activity로 넘어가기
            }
        });
    }
 
    public boolean validation(){
        return inputEmail.equals(emailOK) && inputPassword.equals(passwordOK);
    }
 
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

 

 

댓글