[Android] ListView 사용하기

Krrong·2022년 5월 4일
1

Android

목록 보기
1/14
post-thumbnail

📌 Intro

ListView는 리스트 형태의 데이터를 보여주는 위젯으로 안드로이드에서 가장 중요하고 많이 사용되는 요소다. 하지만 아직 ListView의 사용이 익숙하지 않기 때문에 내용을 정리해두려고 한다.


📌 ListView란?

ListView는 이름에서도 알 수 있듯이 list형태의 데이터가 있어야 한다. 이것을 Adapter를 통해 각각의 데이터와 View를 연결해주는 역할을 한다.

ListView에 표시되는 아이템은 가장 단순하게 텍스트만 출력할수도 있고, 다른 View들의 조합을 이용한 복잡한 형태도 가능하다.


📌 Adapter?

ListView를 이용하여 화면에 데이터를 뿌려주기 위해서는 Adapter를 사용해야 한다고 했다. Adapter는 어떤 역할을 하는 친구일까? 조금 더 알아보도록 하자.

데이터와 Adapter, ListView의 관계는 다음과 같다.


위에서 보이는 그림과 같이 데이터는 Adapter를 통해 ListView위에 올라간다. 여기서 Adapter는 데이터를 관리하는 역할도 하고, View를 생성해주는 역할을 하는 것이다.

즉, Adapter는 데이터를 ListView에 출력하기 위해 사용하는 객체이며 데이터와 View를 이어주는 객체로 볼 수 있다.




📌 ListView 사용하기

그렇다면 실제로 ListView를 사용해보도록 하자.

1. 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/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

먼저 xml파일에 'listView'라는 이름을 가진 ListView를 추가해주도록 한다.


2. MainActivity.java

package com.example.test;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    ListView listView;

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

        // listView binding
        listView = findViewById(R.id.listView);
        
        // 데이터를 담을 List
        List<String> itemList = new ArrayList<String>();

        // 데이터 추가
        for(int i=0; i<10; i++){
            itemList.add("Item : " + Integer.toString(i));
        }

        // adapter 생성
        ArrayAdapter<String> adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, itemList);

        // listView에 adapter 연결
        listView.setAdapter(adapter);
    }
}
  • itemList
    ArrayList의 형태로 ListView에 보여주고 싶은 데이터를 저장한다.

  • ArrayAdapter<String> adapter
    ListView와 데이터를 이어주는 Adapter를 생성한다.
    이 때 ArrayAdapter의 인자는 다음과 같다.

ArrayAdapter(Context context, int resource, T[] objects)

  • context : 안드로이드 시스템에서 제공되는 어플리케이션 전역 환경 정보에 대한 인터페이스(Activity를 통해 사용 가능)

  • resource : View로 매핑될 Resource Id "android.R.layout.simple_list_item_1"은 TextView 위젯으로 구성된 ListView 아이템 리소스 Id

  • objects : 배열로 선언된 데이터



3. 실행 화면

실행화면은 위와 같고, for문을 통해 itemList에 넣어준 데이터가 ListView에 잘 나온 것을 확인할 수 있다.



📌 기타내용

지금은 텍스트만 출력하는 가장 기본적인 ListView에 대해 알아보았다. 이후에는 다양한 뷰들을 조합하여 사용하는 방법도 알아볼 것이다.

+) 공부하다보니 ListView는 아이템을 생성할 때마다 뷰 바인딩을 계속 해주기 때문에 성능이 저하되고 이 때문에 RecyclerView를 사용한다는 것을 알게 되었다. 이 부분에 대해서도 추후에 정리할 것이다.



📌 참고

[1] https://ju-hy.tistory.com/35
[2] https://recipes4dev.tistory.com/42

0개의 댓글