이번주에는 CustomView에 대해서 살펴보았습니다. CustomView의 일부분만 다루어보았습니다.
CustomView를 만들기 위해 한 단계씩 진행해보도록 하겠습니다.
1. 밑그림을 그려줍니다 - 가장 아래쪽에 리스트뷰를 까는 작업을 해줍니다
2. 껍데기를 개조합니다 - listview_item.xml 파일을 만들어 개조한 틀을 하나 만들어줍니다.
리스트의 아이템에 들어갈 틀을 만들어주었습니다. ImageView 하나와 TextView 3개로 구성하였습니다. RelativeLayout을 사용하여 여러 뷰를 배치했습니다.
3. 어댑터 객체를 만들어줍니다 - BaseApater를 이용하여
BaseAdapter는 모든 어댑터의 가장 근본이 되는 어댑터 객체입니다.
class CustomAdapter extends BaseAdapter {
ArrayList<CustomItem> items;
Context context;
LayoutInflater inflater;
//생성자
public CustomAdapter(Context context, ArrayList<CustomItem> items) {
this.items = new ArrayList<>();
this.items.addAll(items);
this.context = context;
this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return 0;
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
return null;
}
}
커스텀 어댑터 클래스를 만들어주고 BaseApater의 상속을 받았습니다.
변수 선언 부분을 먼저 보겠습니다.
ArrayList<CustomItem> items; - listview.xml의 4개의 뷰를 String으로 가져오는 것이 맞지만 하나의 구조(세트)로 가져오기 위해 CustomItem으로 가져옵니다.
Context context; - 컨텍스트를 선언합니다. 액티비티와 어플리케이션의 정보를 얻기 위해 사용합니다. 다양한 어플리케이션이 기능과 서비스를 사용할 수 있습니다.
LayoutInflater inflater; - LayoutInflater를 선언합니다.
LayoutInflater
- 미리 정리해 둔 틀(listview_item.xml)을 실제 메모리에 올려주는 역할을 합니다
- xml에 정의된 리소스들(여러개의 뷰들을)을 하나의 포괄적인 View객체로 반환해주는 역할을 수행합니다
- onCreate 메소드 안에 있는 setContentview 메소드도 layoutInfalter의 역할을 수행합니다
- 시스템 서비스 객체로 제공이 됨 => Context.getSystemService()
생성자 부분을 보겠습니다.
this.items = new ArrayList<>(); this.items.addAll(items); - items에 ArrayList를 할당하고 매개변수로 받은 items를 넣어줍니다.
this.context = context; - 매개변수로 받은 context를 넣어줍니다
this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - 시스템 서비스 객체를 가져와서 넣어줍니다.
CustomItem.class
@Getter
@Setter
public class CustomItem {
Drawable profile;
String chatting_name;
String chatting_contents;
String last_time;
}
Lombok을 이용하여 생성자를 따로 만들지 않고 생성자역할을 할 수 있도록 해주었습니다. @Getter, @Setter 가 Lombok을 사용한 부분입니다. 이노테이션으로 간편하게 사용할 수 있습니다.
'Android' 카테고리의 다른 글
[Android] ViewHolder 패턴 (0) | 2020.10.29 |
---|---|
[Android] 5주차 스터디 (Kotlin, CustomListView) (0) | 2020.10.28 |
[Android] ListView(리스트뷰)와 RecyclerView(리사이클러뷰) (0) | 2020.09.21 |
[Android] Adapter객체를 생성하면서 만들 수 있는 Adapter 형태 (0) | 2020.09.17 |
[Android] 3주차 스터디 (AlertDialog, ListView) (0) | 2020.09.17 |