선택 위젯
: 여러 개의 아이템 중에 하나를 선택할 수 있는 리스트 모양의 위젯
- 선택 위젯에 있는 각각의 아이템들은 뷰가 아닌 '어댑터'에서 관리됩니다.
- 선택 위젯의 종류 중에는 리싸이클러뷰(RecyclerView)가 있습니다.
activity_main.xml
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
- activity_main.xml에서 생성한 리싸이클러뷰는 일종의 껍데기 역할을 합니다.
- 즉 리스트가 어디서 보여질지, 그 위치만 지정하는 것이라고 생각하면 됩니다.
Person.java
public class Person {
String name;
String mobile;
public Person(String name, String mobile) {
this.name = name;
this.mobile = mobile;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMobile() {
return mobile;
}
public void setMobile(String Mobile) {
this.mobile = mobile;
}
}
- Person클래스는 어댑터 안에 들어갈 각 아이템을 담아둘 클래스입니다.
- 즉 리스트에 들어갈 각각의 아이템에 대한 '틀'인 셈입니다.
PersonAdapter.java
public class PersonAdapter extends RecyclerView.Adapter<PersonAdapter.ViewHolder> {
// 1. 어댑터의 주요 메서드 3가지
ArrayList<Person> items = new ArrayList<Person>();
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) [
// 인플레이션을 통해 뷰 객체 만들기
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
View itemView = inflater.inflater(R.layout.person_item, viewGroup, false);
// 뷰홀더 객체를 생성하면서 뷰 객체를 전달하고 그 뷰홀더 객체를 반환하기
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) {
Person item = items.get(position);
viewHolder.setItem(item);
}
@Override
public int getItemCount() {
return items.size();
}
// 2. 어댑터에 Person 객체를 넣거나 가져갈 수 있도록 해주는 메서드들
public void addItem(Person item) {
items.add(item);
}
public void setItems(ArrayList<Person> items) {
this.items = items;
}
public Person getItem(int position) {
return items.get(position);
}
public void setItem(int position, Person item) {
items.set(position, item);
}
// 3. ViewHolder 클래스
static class ViewHolder extends RecyclerView.ViewHolder {
TextView textView;
TextView2 textView2;
public ViewHolder(View itemView) {
// 매개변수로 전달받은 뷰 객체를 부모 클래스의 변수에 담는다.
super(itemView);
textView = itemView.findViewById(R.id.textView);
textView2 = itemView.findViewById(R.id.textView2);
}
// 뷰홀더에 들어있는 뷰 객체의 데이터를 다른 것으로 보이도록 하는 함수
public void setItem(Person item) {
textView.setText(item.getName());
textView2.setText(item.getMobile());
}
}
}
- 리스트에 있는 각각의 아이템들은 '뷰'로 만들어지며, 이 뷰들은 '뷰홀더'에 담기게 됩니다.
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = findViewById(R.id.recyclerView);
// 리싸이클러뷰에 레이아웃 매니저 설정하기
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(layoutManager);
PersonAdapter adapter = new PersonAdapter();
adapter.addItem(new Person("김민수", "010-1000-1000"));
adapter.addItem(new Person("김하늘", "010-2000-2000"));
adapter.addItem(new Person("홍길동", "010-3000-3000"));
// 리싸이클러뷰에 어댑터 설정하기
recyclerView.setAdapter(adapter);
}
}
728x90
반응형
'Frontend > Android' 카테고리의 다른 글
안드로이드) 파이어베이스 Realtime Database + 리싸이클러뷰 (0) | 2022.01.04 |
---|---|
안드로이드) 파이어베이스 구글 로그인 (0) | 2022.01.04 |
안드로이드) 뒤로가기 2번 누르면 종료되게 하기 (0) | 2021.11.01 |