Frontend/Android

안드로이드) 리싸이클러뷰(RecyclerView)

innit 2022. 1. 5. 19:06

선택 위젯

: 여러 개의 아이템 중에 하나를 선택할 수 있는 리스트 모양의 위젯

- 선택 위젯에 있는 각각의 아이템들은 뷰가 아닌 '어댑터'에서 관리됩니다.

- 선택 위젯의 종류 중에는 리싸이클러뷰(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
반응형