본문 바로가기
Android Studio

[Android Studio] 다른 액티비티로 클래스의 객체를 전달하기

by coding_su 2023. 2. 1.

📝다른 액티비티로 클래스의 객체를 전달하기

아래 코드는 카드뷰를 클릭하면 새로운 액티비티가 열리면서 그 액티비티에 객체를 전달하는 코드이다

+ RecyclerView에서 몇번째 행을 눌렀는지 알 수 있는 어댑터의 함수는 getAdapterPosition() 이다

public ViewHolder(@NonNull View itemView) {
    super(itemView);

    txtName = itemView.findViewById(R.id.txtName);
    txtPhone = itemView.findViewById(R.id.txtPhone);
    imgDelete = itemView.findViewById(R.id.imgDelete);
    cardView = itemView.findViewById(R.id.cardView);

    // 카드뷰를 클릭했을때의 이벤트를 입력
    cardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // 1. 인텐트에 유저가 어떤 행을 눌렀는지 파악하여
            int index = getAdapterPosition();
            // 누른 이름과 전화번호를 담아서 넘긴다
            Contact contact = contactList.get(index);

            Intent intent = new Intent(context, EditActivity.class);
            intent.putExtra("contact", contact);
            context.startActivity(intent);
        }
    });

}

 

액티비티를 띄울때 아래 코드처럼 하나하나 보내도 되고 Serializable해서 보내도 되지만

해당 클래스(Contact)에 implements Serializable 하면 위 코드처럼 바로 보낼 수 있다

intent.putExtra("id", contact.id);
intent.putExtra("name", contact.name);
intent.putExtra("phone", contact.phone);

// contact 데이터를 직렬화해서 보낸다
intent.putExtra("contact", (Serializable) contact);

 

대신 가져올때 직렬화한걸 원상복구 해서 가져온다

(Contact) getIntent().getSerializableExtra();

// getSerializableExtra로 가져온다
Contact contact = (Contact) getIntent().getSerializableExtra("contact");

// 사용하기
editName.setText(contact.name);
editPhone.setText(contact.phone);

댓글