본문 바로가기
TIL/Android

Adapter View

by J1-H00N 2024. 4. 4.

Adapter View

개발자는 화면의 다양한 뷰들을 배치해 화면을 구성하게 된다. 대부분의 뷰들은 배치하면 기본적으로 정해진 속성에 따라 모양이 구성된다.

하지만 일부 뷰들은 스스로 결정할 수 없는 부분이 있어 개발자가 반드시 데이터를 설정해야만 구성이 가능하다.

이렇게 개발자가 반드시 설정해야 화면을 구성할 수 있는 뷰들을 Adapter View라고 한다.

 

Adapter Class

Adapter View들은 뷰를 구성하기 위해서 개발자가 다양한 데이터를 설정해줘야 한다. 이러한 데이터를 관리하는 클래스를 Adapter Class라고 부른다.

사용 목적이나 적용할 뷰에 따라 다양하게 제공되고 있으며 원한다면 직접 생성해서 사용할 수도 있다.

주로 다양한 항목을 제공하는 뷰를 구성할 때 사용한다.

 

  • ListView
    • 가장 대표적이고 가장 많이 사용하는 어댑터 뷰이다.
    • 지금은 RecyclerView 사용을 추천하고 있지만 개념을 공부하기에는 적당하다.
    • Recycler View가 내부적으로 관리의 효율성을 가지고 있지만 복잡하기 때문에 지금도 List View를 많이 사용하고 있다.
    • 주요 메서드
      • setAdapter : 어댑터 뷰를 구성하기 위해 사용하는 어댑터를 설정한다.
    • 주요 이벤트
      • itemClick : 항목이 클릭되는 것을 감지한다. 전달값은 이벤트가 발생한 어댑터 뷰, 터치한 항목 뷰, 터치한 항목의 인덱스, 클릭한 뷰의 id이다.
    • Custom ListView(AdapterView) 
      • 기본적으로 제공되는 layout 파일 대신에 개발자가 직접 작성한 layout을 이용해 모든 어댑터 뷰를 구성할 수 있다.
    • SimpleAdapter
      • 개발자가 ListView의 항목을 자유롭게 디자인 했을 때 사용하는 Adapter Class이다.
      • ListView의 항목 내에 배치된 뷰들을 직접 지정하면서 데이터를 설정할 수 있다.
    • CustomAdapter
      • AdapterView의 항목을 자유롭게 디자일해서 사용할 때는 SimpleAdapter만으로도 충분하지만, AdapterView 자체를 커스터마이징하여 특별한 기능을 부여하고 싶을 때는 Adapter 클래스를 구현하면 된다.
      • BaseAdapter를 상속받아 다음 메서드를 구현하면 된다.
        • getCount : 어댑터뷰를 통해 보여줄 항목의 개수를 반환한다.(필수)
        • getItem : 생성된 항목 뷰를 반환하는 목적으로 사용한다. 따로 받아올 수 있기 때문에 구현하지 않아도 된다.
        • getItemId : 생성된 항목 뷰의 아이디를 반환하는 목적으로 사용된다. 마찬가지로 포지션 값 등을 받아올 수 있기 때문에 구현하지 않아도 된다.
        • getView : 어댑터뷰를 통해 보여줄 항목의 뷰를 반환한다.(필수) 
          모든 뷰를 반환하면 메모리가 낭비되기 때문에 화면에 보여줄 뷰만 반환한다. 또한 스크롤 등을 통해 보이지 않게 된 뷰를 저장해서 재사용해 더 적은 뷰로 많은 항목을 표현할 수 있게 된다.
  • Spinner
    • 사용자에게 항목을 주고 선택하게 할 수 있는 어댑터 뷰이다.
    • 작은 스마트폰 화면을 효율적으로 사용할 수 있다는 장점을 가지고 있다. 평소에는 접혀있다가 터치하면 펼쳐지는 형식이다.
    • 접혀져 있을 때와 펼쳐졌을 때의 모양을 각각 설정해줘야 한다.
      ex)
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, data);
      adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    • 주요 속성
      • spinnerMode : 나타나는 메뉴 항목의 타입을 설정한다. (dialog/dropdown)
    • 주요 메서드
      • setSelection : 항목을 선택한다. (0부터 시작)
      • getSelectedItemPosition : 현재 선택되어 있는 항목의 인덱스를 가져온다.
      • setAdapter : 뷰의 구성을 위한 Adapter를 설정한다.
    • 주요 이벤트
      • itemSelected : 사용자가 항목을 선택하는 것을 감지한다. (Spinner 전용 이벤트가 아니기 때문에 라디오 형식인 Spinner가 onNothingSelected를 구현할 필요는 없다.)
  • GridView
    • ListView와 거의 동일하며 항목을 그리드 형태로 보여 줄 수 있는 뷰이다.
    • 주요 속성
      • numColumns : 그리드로 구성할 칸의 개수. auto_fit으로 설정하면 디바이스에 맞게 자동으로 구성된다. 화면 회전 시 유용하다.
    • 주요 이벤트
      • ItemClick : 사용자가 항목을 선택하는 것을 감지한다.
  • AutoCompleteTextView
    • EditText에 자동완성 기능을 추가한 뷰이다.
    • 사용자가 문자열을 입력하면 설정한 문자열 항목을 통해 자동완성 리스트를 제공한다.
    • 주요 속성
      • completionThreshold : 몇 글자를 입력했을 때 자동완성 리스트가 나타날지 설정한다.
    • 주요 메서드
      • getText : 사용자가 입력한 문자열 값을 반환한다.
    • 주요 이벤트
      • ItemClick : 자동완성된 항목을 클릭하는 것을 감지한다.
  • MultiAutoCompleteTextView
    • AutoCompleteTextView와 거의 동일하며 구분자를 활용해 여러 문자열을 동시에 입력받을 수 있는 어댑터 뷰이다.
    • 주요 메서드
      • setTokenizer : 구분자를 설정한다. CommaTokenizer(, 구분자)를 기본제공한다.
      • getText : 사용자가 입력한 문자열을 반환한다.
  • SingleChoiceListView
    • 다수의 항목을 제공하고 항목 중 하나를 선택할 수 있는 ListView이다.
    • ListView의 Mode를 변경하여 설정한다.
    • 구현 방법은 ListView와 동일하며 ListView를 SingleChoice로 설정해준다.
      ex) activityMainBinding.list1.setChoicemode(ListView.CHOICE_MODE_SINGLE);
    • 사용자가 선택한 항목이 무엇인지 파악해야 할 때 ListView의 getCheckedItemPosition 메서드를 이용해 현재 선택된 항목이 무엇인지 파악한다.
  • MultiChoiceListView
    • 다수의 항목을 제공하고 항목 중 다수를 선택할 수 있는 ListView이다.
    • ListView의 Mode를 변경하여 설정한다.
    • 구현 방법은 ListView와 동일하며 ListView를 MultiChoice로 설정해준다.
      ex) activityMainBinding.list1.setChoicemode(ListView.CHOICE_MODE_MULTIPLE);
    •  사용자가 선택한 항목이 무엇인지 파악해야 할 때 ListView의 getCheckedItemPositions 메서드를 활용한다. 이 메서드는 SparseBooleanArray라는 클래스의 객체가 담겨져 있는데 이 객체에는 true가 설정된 항목체크 상태가 변경된 적이 있는 항목의 인덱스 변화 체크 상태 값을 가지고 있다.
  • RecyclerView
    • Android 5.0 때 추가된 뷰이다.
    • ListView와 GridView의 구현이 비슷한 부분이 많아 이를 통합한 뷰이다.
    • RecyclerView는 어댑터를 직접 구현해 줘야 하며 이를 통해 항목을 자유롭게 구성할 수 있다.
    • 반드시 항목들을 어떠한 형태로 보여줄 것인가를 설정해야 한다.
    • ViewHolder 클래스를 RecyclerView의 Adapter 클래스 내부에 구현해줘야 한다.
      • ViewHolder : 항목 하나를 구성하는 뷰들의 주소 값을 가지고 있는 클래스이다.
    • layoutManger를 변경해 레이아웃 형식을 바꿀 수 있고, xml파일에서 background="?attr/selectableItemBackground", clickable="true", focusable="true" 등의 옵션을 추가해 클릭 기능을 추가할 수 있다.
    • LayoutParams 메서드를 통해 가로 세로 길이 조절이 가능하다.

'TIL > Android' 카테고리의 다른 글

Menu  (0) 2024.04.09
권한  (0) 2024.04.05
Widget  (0) 2024.03.28
view와 layout  (0) 2024.03.20
안드로이드 기초  (0) 2024.03.19