Android

[Android] 4주차 스터디 (CustomListView)

poppy 2020. 9. 24. 10:35
반응형

이번주에는 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을 사용한 부분입니다. 이노테이션으로 간편하게 사용할 수 있습니다.

반응형