[Android] ListView

728x90
Adapter View

- 개발자는 화면의 다양한 View 들을 배치하여 화면을 구성함

- 대ㅐ부분의 뷰들은 대치를 하면 기본적으로 정해진 속성에 따라 모양이 구성

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

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

 

Adapter Class

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

- Adapter class는 사용 목적이나 적용할 View레 따라 다양하게 제공되고 있으며 원한다면 직접 생성하여 사용할 수도 있다. 주로 다양한 항목을 제공하는 View를 구성할 때 사용한다.
 -> 어댑터 클래스는 적용할 뷰에 따라서 여러 개일수도 있다. 

- 어떤걸 보여줄지 몇개 보여줄지 어떻게 보여줄건지를 개발자가 어댑터 클래스를 가지고 만든 객체에 세팅하여 그 객체를 어댑터 뷰에 설정해 주면 그걸 가지고 화면을 구성해서 보여줌

 

List View

- 현재는 레거시 쪽으로 빠져있어서 현재는 더 다양한 기능을 가지고 있는 리사이클러 뷰 사용을 추천하고 있지만 구현하는게 복잡하기때문에 리스트뷰를 먼저 보고 지나감

- 리사이클러 뷰가 메모리 관리 등 관리의 효율성을 가지고 있지만 아직도 리스트뷰를 많이 사용하고 있음 -> 쉽기 때문에

- 리사이클러 뷰를 사용할 정도가 아니라면 리스트뷰를 사용해도 된다.

 

ListView 주요 메서드

- setAdapter : AdapterView 를 구성하기 위해 사용하는 adapter를 설정

 

package kr.co.listview;

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

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 kr.co.listview.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding activityMainBinding;

    //리스트 뷰 구성을 위해 사용할 문자열 데이터
    String [] data1 = {
            "문자열1", "문자열2", "문자열3","문자열5",
            "문자열6", "문자열7", "문자열8","문자열9", "문자열10",
            "문자열11", "문자열12", "문자열13","문자열14", "문자열15",
            "문자열16", "문자열17", "문자열18","문자열19", "문자열20",
            "문자열21", "문자열22", "문자열23","문자열24", "문자열25",
    };
    //문자열 하나가 항목 하나를 구성하게 되기 때문에 25개의 List 가 들어감

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        activityMainBinding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(activityMainBinding.getRoot());

        //문자열 값을 세팅할 수 있는 ArrayAdapter
        ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data1);
        // android.R.layout.simple_list_item_1 : 어떻게가 결정
        // data1 : 몇개, 무엇을이 결정

        //어댑터를 리스트뷰에 적용
        activityMainBinding.listView.setAdapter(adapter1);
    }
}

 

 

 

ListView의 주요 이벤트 

- ItemClick : 항목을 터치하면 발생

 

package kr.co.listview;

import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;

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 kr.co.listview.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding activityMainBinding;

    //리스트 뷰 구성을 위해 사용할 문자열 데이터
    String [] data1 = {
            "문자열1", "문자열2", "문자열3","문자열5",
            "문자열6", "문자열7", "문자열8","문자열9", "문자열10",
            "문자열11", "문자열12", "문자열13","문자열14", "문자열15",
            "문자열16", "문자열17", "문자열18","문자열19", "문자열20",
            "문자열21", "문자열22", "문자열23","문자열24", "문자열25",
    };
    //문자열 하나가 항목 하나를 구성하게 되기 때문에 25개의 List 가 들어감

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        activityMainBinding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(activityMainBinding.getRoot());

        //문자열 값을 세팅할 수 있는 ArrayAdapter
        ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data1);
        // android.R.layout.simple_list_item_1 : 어떻게가 결정
        // data1 : 몇개, 무엇을이 결정

        //어댑터를 리스트뷰에 적용
        activityMainBinding.listView.setAdapter(adapter1);

        //항목을 터치 했을 때
        ListItemClickListener1 listItemClickListener1 = new ListItemClickListener1();
        activityMainBinding.listView.setOnItemClickListener(listItemClickListener1);
    }

    //항목을 터치 했을 때
    class ListItemClickListener1 implements AdapterView.OnItemClickListener{

        // 첫 번째 : 이벤트가 발생한 어댑터 뷰
        // 두 번째 : 터치한 항목 뷰
        // 세 번째 : 터치한 항목의 순서값(0부터 1씩 증가) ** 가장 중요 **
        // 네 번째 : 터치한 항목의 id 안드로이스 os가 자기가 분류해서 쓰기 떄문에 크게 의미 없긴 함...
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            //사용자가 터치한 n번째 문자열을 가져옴
            String st1 = data1[i];
            activityMainBinding.textView.setText(st1);
        }
    }
}

 

728x90

'안드로이드 스튜디오' 카테고리의 다른 글

[Android] CustomAdapter  (0) 2026.03.13
[Android] Custom ListView  (0) 2026.03.02
[Android] 라이브러리 버전 수정 방법  (0) 2026.02.25
[Android] ToggleButton  (0) 2026.02.02
[Android] ImageView  (1) 2026.02.02