본문 바로가기
안드로이드 스튜디오

[안드로이드 스튜디오] 앱만들기 #6. ListView

by sojung118 2024. 8. 27.

[ 실행화면 ]

ListView

 

 

달리고 달려 벌써 6번째 강의까지 왔다.

이번엔 자주 사용되는 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:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity">

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


</LinearLayout>

 

 

이제 이 xml은 별로 어렵지 않다.

추가되거나 변경되는 부분이 해당 강의에서 배우는 부분밖에 없기 때문 ㅎㅎ

이번 xml에서도 ListView만 추가되었다.

 


 

 

2. MainActivity.java

package com.example.android_test;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

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

public class MainActivity extends AppCompatActivity {

    private ListView lv_id;

    @Override

    //onCreate -> 어플을 처음 실행했을때 실행됨

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

        lv_id = findViewById(R.id.lv_id);

        List<String> data = new ArrayList<>();

        ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,data);
        lv_id.setAdapter(adapter);

        data.add("리스트뷰");
        data.add("강의들으면서");
        data.add("추가시키기");

        //이 상태를 저장하겠다는 의미를 가진 notifyDataSetChanged() 해주기
        adapter.notifyDataSetChanged();

    }
}

 

 

여느때처럼 ListView 변수 선언해주고 findViewById로 변수에 id값 할당해주기!

 

 

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

    lv_id = findViewById(R.id.lv_id);

    List<String> data = new ArrayList<>();

    ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,data);
    lv_id.setAdapter(adapter);

    data.add("리스트뷰");
    data.add("강의들으면서");
    data.add("추가시키기");

    //이 상태를 저장하겠다는 의미를 가진 notifyDataSetChanged() 해주기
    adapter.notifyDataSetChanged();

}

 

 

주목해야할 부분은 이 부분이다.

 List<String>을 사용하여 data라는 이름의 리스트를 생성하자.

 

 

  • List<String>: String 타입의 요소들을 담을 수 있는 리스트 정의
  • new ArrayList<>(): ArrayList는 List 인터페이스를 구현하는 클래스 중 하나로, 가변 길이의 배열을 의미
  • 결과: 빈 String 리스트인 data가 생성. 이 리스트에 데이터 추가 가능.

 

 

// 새로운 List<String> 생성

List<String> data = new ArrayList<>();

// 리스트에 요소 추가

data.add("첫번째 리스트 내용");

data..add("두번째 리스트 내용");

data..add("세번째 리스트 내용");

 

 

 

  • ArrayAdapter<String>: String 타입의 데이터를 ListView에 연결하기 위한 어댑터를 정의
  • 어댑터는 데이터를 ListView 같은 UI 컴포넌트에 바인딩하는 역할
  • new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data);:
    • this: 현재 Activity 또는 Context를 가리킴. 어댑터가 UI 요소에 접근할 수 있도록 하기 위해 필요
    • android.R.layout.simple_list_item_1: Android에서 제공하는 기본 레이아웃 리소스 중 하나로, 단순한 텍스트 항목을 리스트의 각 항목으로 사용하는 레이아웃.
    • data: 위에서 생성한 List<String> 타입의 리스트. 어댑터는 이 리스트에 있는 데이터를 ListView에 표시
  • 결과: data 리스트에 있는 데이터를 simple_list_item_1 레이아웃을 사용해 ListView에 표시할 수 있는 어댑터가 생성

 

 

  • setAdapter(adapter): ListView에 위에서 생성한 ArrayAdapter를 설정
  • 이 어댑터를 통해 ListView가 데이터를 표시하게 됨
  • 결과: lv_id라는 ListView에 어댑터가 연결되어, data 리스트의 항목들이 ListView에 됨.

 

 

 

notifyDataSetChanged() : 현재 이 상태를 저장하겠다는 의미를 가짐 / data.add 후 저장하기

 

이건 그냥 내 궁금증.... 그렇다면 ListView는 UI인가?

 

 

아하!

 

 

참고 강의는 아래에!

https://www.youtube.com/watch?v=snnqxAEf9rI&list=PLC51MBz7PMyyyR2l4gGBMFMMUfYmBkZxm&index=7