안녕하세요!! @wonnieyoon입니다.
안드로이드에서 Activity(화면)에서 다른 Activity(화면)으로 넘어갈때 Intent를 사용합니다.그런데 Intent를 어떻게 사용하시나요?
Intent intent = new Intent(Context,xxx.class);
startActivity(intent); 많은 분들이 사용하고 계십니다.
당연히 이렇게 쓰는게 맞습니다.
하지만 큰 단점이라고 한다면 데이터를 여러개 보낼때 코드가 길어지고 관리하기가 불편합니다.
객체를 만들어서 인터페이스 Parcelable을 구현한다음 사용하면 정말 편리하고 깔끔하게 코딩을 하실수 있습니다.
참고로 Parcelable은 소포,꾸러미의 뜻을 가지고 있습니다.
개발코드
<MainActivity.java>
public class MainActivity extends AppCompatActivity {
private EditText user_id,user_pw; // 사용자 id, 사용자 pw
private Button login_button; // 로그인 버튼
private TextView register_txt,lost_txt; // 회원가입,비밀번호 txt
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
user_id = (EditText)findViewById(R.id.login_edit);
user_pw = (EditText)findViewById(R.id.pw_edit);
login_button = (Button)findViewById(R.id.login_button);
register_txt = (TextView)findViewById(R.id.register_txt);
lost_txt = (TextView)findViewById(R.id.lost_txt);
}
@Override
protected void onStart() {
super.onStart();
Toast.makeText(this,"확인",Toast.LENGTH_SHORT).show();
}
@Override
protected void onResume() {
super.onResume();
if(getIntent().getExtras()!=null) {
Bundle bundle = getIntent().getExtras();
User user = bundle.getParcelable("userdata");
if (user != null) {
user_id.setText(user.getEmail().toString());
user_pw.setText(user.getPassword().toString());
}
}
/* -- 회원가입 클릭시 -- */
register_txt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this,RegisterActivity.class));
}
});
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
protected void onPause() {
super.onPause();
}
}
<RegisterActivity.java>
public class RegisterActivity extends AppCompatActivity {
private EditText email_edit,pw_edit; //사용자 id,pw
private EditText register_info_edit; //등록 정보 edit
private CheckBox register_check; //checkbox
private Button register_button; //등록버튼
private User user; //사용자 회원가입 정보 객체
private TextView login_return;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register_activity);
email_edit = (EditText)findViewById(R.id.register_email_edit);
pw_edit = (EditText)findViewById(R.id.register_pw_edit);
register_info_edit = (EditText)findViewById(R.id.register_info_edit);
register_check = (CheckBox)findViewById(R.id.register_check);
register_button = (Button)findViewById(R.id.register_button);
login_return = (TextView)findViewById(R.id.return_login_txt);
register_info_edit.getBackground().setColorFilter(getResources().getColor(R.color.red), PorterDuff.Mode.SRC_IN);
}
@Override
protected void onStart() {
super.onStart();
user = new User();
}
@Override
protected void onResume() {
super.onResume();
register_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { //회원가입 버튼
if(register_check.isChecked() == true) //checkbox 눌렸을때
{
user.setEmail(email_edit.getText().toString());
user.setPassword(pw_edit.getText().toString());
Intent intent = new Intent(RegisterActivity.this,MainActivity.class);
intent.putExtra("userdata",user);
startActivity(intent);
}else
{
Toast.makeText(RegisterActivity.this,"이용약관을 체크하세요!!",Toast.LENGTH_SHORT).show();
}
}
});
login_return.setOnClickListener(new View.OnClickListener() { // 이미 회원가입 되어있을때 -> 로그인하기
@Override
public void onClick(View v) {
startActivity(new Intent(RegisterActivity.this,MainActivity.class));
finish();
}
});
}
}
<User.java>
public class User implements Parcelable{
private String email;
private String password;
public User()
{}
public User(String email, String password) {
this.email = email;
this.password = password;
}
protected User(Parcel in) {
email = in.readString();
password = in.readString();
}
public static final Creator<User> CREATOR = new Creator<User>() {
@Override
public User createFromParcel(Parcel in) {
return new User(in);
}
@Override
public User[] newArray(int size) {
return new User[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(email);
dest.writeString(password);
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
결과
<시작화면>
<회원가입 화면>
간단하게 설명하자면
처음화면에서 회원가입 버튼을 누르고 회원가입 화면이 나오면
이메일과 패스워드를 입력한후 회원가입을 하게 되면
이때 parcelable을 사용하여 이메일과 패스워드를 하나의 객체로 묶어서
처음화면에 뿌려주게 됩니다.
xml 는 올리지 않았는데 그 이유는 xml 태그 때문에 포스팅을 할수 없더라구요.다음부터는 Git에 올려야겠습니다.
이 예제는 간단한거라 editText만 있으면 쉽게 구현가능할수 있습니다.