군침이 싹 도는 코딩
리사이클러뷰 어댑터에서 새로운 액티비티 실행하는 방법 본문
# 해당 리사이클러뷰에서 하나의 열을 누르면 수정할수있게 하는 액티비티를 열어주는 코드를 작성해보자
# 먼저 해당 열을 만들어준 xml 파일로가서 cardView에 id값을 준다
public class viewHolder extends RecyclerView.ViewHolder{
TextView txtName;
TextView txtPhone;
ImageView imgDelete;
CardView cardView;
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) {
Intent intent = new Intent(context, EditActivity.class);
}
# 어댑터 클래스로가서 뷰 홀더 클래스에 카드뷰 멤버변수를 만들고 화면을 연결해준다
cardView.setOnClickListener를 쓰고 온클릭안에 인텐트를 써서 새로운 액티비티를 실행가능하다
package com.mugoori.contactapp.adapter;
// 1. RecyclerView.Adapter 를 상속받는다
// 2. 상속받은 클래스가 abstract 이므로 unimplemented method override 한다
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.cardview.widget.CardView;
import androidx.recyclerview.widget.RecyclerView;
import com.mugoori.contactapp.EditActivity;
import com.mugoori.contactapp.MainActivity;
import com.mugoori.contactapp.R;
import com.mugoori.contactapp.model.Contact;
import java.io.Serializable;
import java.util.List;
// 6. RecyclerView.Adapter 의 데이터 타입을 적어주어야 한다
// 우리가 만든 viewHolder 로 적는다
// 7. 에러가 뜨면 우리가 만든 viewHolder 로
// onCreateViewHolder, onBindViewHolder 함수를 변경해준다
public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.viewHolder> {
// 5. 어댑터 클래스의 멤버변수와 생성자를 만든다
Context context;
List<Contact> contactList;
public ContactAdapter(Context context, List<Contact> contactList) {
this.context = context;
this.contactList = contactList;
}
// 8. 오버라이드 함수 3개를 구현해준다
@NonNull
@Override
public ContactAdapter.viewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
// xml 파일을 연결하는 작업
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.contact_row,parent,false);
return new ContactAdapter.viewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ContactAdapter.viewHolder holder, int position) {
// 뷰에 데이터를 셋팅한다
Contact contact = contactList.get(position);
holder.txtName.setText( contact.name );
holder.txtPhone.setText( contact.phone );
}
@Override
public int getItemCount() {
// 전체 데이터의 갯수를 적어준다
return contactList.size();
}
// 3. viewHolder 클래스를 만든다
// 이 클래스는 row.xml 화면에 있는 뷰를 연결 시키는 클래스다
// RecyclerView.ViewHolder 상속 받는다
// 4. 생성자를 만든다
// 생성자에서 뷰를 연결시키는 코드를 작성하고 클릭 이벤트도 작성한다
public class viewHolder extends RecyclerView.ViewHolder{
TextView txtName;
TextView txtPhone;
ImageView imgDelete;
CardView cardView;
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);
// 2. 수정 액티비티를 띄운다
// 어떤 액티비티가 어떤 액티비티를 띄운다
Intent intent = new Intent(context, EditActivity.class);
intent.putExtra("contact", contact);
// intent.putExtra("id",contact.id);
// intent.putExtra("name",contact.name);
// intent.putExtra("phone",contact.phone);
context.startActivity(intent);
}
});
}
}
}
# adapter 클래스 코드
'Android' 카테고리의 다른 글
다른 액티비티로 데이터 전달 시 클래스의 객체를 전달하는 방법 ( Serializable, putExtra() , getSerializableExtra() ) (0) | 2023.02.01 |
---|---|
리사이클러뷰에서 몇 번째 행을 눌렀는지 알 수 있는 어댑터의 함수 ( getAdapterPosition() ) (0) | 2023.02.01 |
RecyclerView 와 Adapter 를 이용하여 리스트를 화면에 표시하는 법 (1) | 2023.02.01 |
Adapter 만드는 법 (0) | 2023.02.01 |
메뉴 아이콘 이미지를 백터 이미지로 만드는 방법 (0) | 2023.01.31 |