Seongwon Lim

[Android] ListView 사용 방법 본문

Android

[Android] ListView 사용 방법

limsw 2022. 6. 5. 00:06
반응형

서론

이번 글에서는 안드로이드 개발 시 많이 사용하는 Adapter, ListView의 개념과 사용하는 방법을 간단하게 살펴보고자 한다.

ListView?

ListView는 리스트 형태로 구성된 데이터를 보여주기 위한 위젯으로 AdapterView의 한 종류이다.

ListView는 텍스트 뿐만 아니라 사진, 버튼 등 다양한 위젯 등을 출력할 수 있으며 데이터가 많아 화면이 넘어가는 경우 스크롤(Scroll) 기능도 제공한다. 우리가 많이 사용하는 카카오톡 친구 목록, 채팅 목록 등과 같이 리스트 형태로 열거되어 있는 것들을 리스트 뷰 라고 생각하면 좋을 것 같다.

 

Adapter & AdapterView

Adapter는 데이터를 다양한 형식의 리스트로 보여주기 위해 사용하는 것으로, 데이터리스트 뷰 사이에 존재하는 객체이다.

  • 쉽게 이해하면 데이터와 리스트 뷰를 연결시키기 위한 다리(Bridge) 역할을 한다고 생각할 수 있다.
  • Adpater는 원본 데이터를 Adapter에 담고, AdatperView가 출력할 수 있는 형태로 데이터를 제공하는 역할을 한다.

그러면, AdapterView는 무엇일까?

AdapterView는 많은 데이터를 처리하기 위한 View로, View에 정보를 직접 넣는 것이 아니라 Adpater를 통해 받은 데이터를 화면에 보여주는 위젯이라고 생각할 수 있다.

  • AdapterView 에는 ListView, GridView, Spinner, Gallery 등이 존재한다.

 

이번 예제에서는 AdapterView의 종류인 ListView, 그리고 데이터와 뷰를 연결하는 객체인 Adapter를 사용하여 예제를 구현하고자 한다.

activity_main.xml 파일 수정하기

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </ListView>

</LinearLayout>

안드로이드 프로젝트를 처음 생성하면 디자인 쪽을 담당하는 activity_main.xml 파일이 생성된다.

해당 파일을 위와 같이 ListView 위젯을 추가한다.

MainActivity.java 파일 수정하기

public class MainActivity extends AppCompatActivity {

    private ListView list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        list = (ListView) findViewById(R.id.list); // 1
        List<String> data = new ArrayList<>(); // 2

        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data); // 3
		
        // 4
        data.add("강아지");
        data.add("고양이");
        data.add("기린");
        data.add("코끼리");
        data.add("원숭이");
        data.add("코알라");
        data.add("호랑이");
        data.add("사자");
        
        list.setAdapter(adapter); // 5
		
        adapter.notifyDataSetChanged();
    }
}
  1. list 라는 이름으로 ListView 변수를 생성했다.
  2. 그리고 Adapter에 데이터를 담을 리스트 변수 data를 생성했다.
  3. 다음으로 데이터를 담을 어댑터를 만들기 위해 adapter 라는 ArrayAdapter<String> 타입의 어댑터를 생성했다.
  4. 어댑터에 담을 변수를 정의하기 위해 data라는 변수에 데이터를 추가했다.
    • 위 예제와 같이 data.add(...) 를 통해서 데이터를 추가할 수 있다.
  5. 마지막으로 리스트 뷰와 어댑터를 연결한다.

 

3번에서 정의한 android.R.layout.simple_list_item_1리스트 뷰에 데이터를 보여줄 때 어떤 구조로 보여줄 지 정하는 부분으로, 안드로이드 스튜디오에서 미리 정의되어 제공하는 구조이다.

 

adapter.notifyDataSetChanged() 메서드는 어댑터 뷰의 데이터가 추가, 삭제 등으로 인해 변경이 감지되면 자동적으로 새로고침을 해주는 부분이다.

결과 확인하기

코드를 예제와 같이 구성 후 실행하면 위와 같은 결과를 얻을 수 있다.

 

데이터 양이 많아 화면을 넘어가는 경우 스크롤 기능이 자동적으로 추가되는 것도 확인할 수 있다.

Comments