For developer/Android

(Android)my26_listview,리스트뷰

프린이0218 2020. 6. 1. 18:50

리스트란? 일반적으로 여러 개의 아이템 중 하나를 선택할 수 있는 세로 모양으로 된 화면 컨트롤을 말한다.

 

위젯은 선택 위젯과 일반 위젯으로 나눌 수 있는데 그 차이는 어뎁터 패턴을 사용하는 것을 선택 위젯이라고 한다. 선택 위젯에 데이터를 넣을 때 위젯이 아닌 어뎁터에 설정 해야 한다. 화면에 보이는 뷰도 어뎁터에서 만든다.
대표적인 선택 위젯은 리스트 뷰 이다.

 


※어댑터 : 보여지는 View와 그 View에 올릴 Data를 연결하는 다리 역할을 한다.

 

ArrayAdapter란?

ArrayAdapter는 배열과 어댑터 뷰를 연결하는 클래스입니다. 여기서 배열은 어댑터 뷰가 화면으로 보여줄 자료들의 집합

선택 위젯이란? 여러 개의 아이템 중에 하나를 선택할 수 있는 리스트 모양의 위젯

 

 

 

리스트뷰에 리스트에 담겨진 데이터들을 출력한 예제 이다.

 

①Arraylis인 list에 데이터들을 추가한다.

ArrayList<String> list = new ArrayList<>();
        
        list.add("바나나");
        list.add("딸기");
        list.add("수박");
        list.add("사과");
        list.add("오렌지");
        list.add("망고");
        list.add("키위");
        list.add("포도");
        list.add("멜론");
        list.add("두리안");
        list.add("바나나");

 

 

②ArrayAdapter 객체를 생성하여 기본 sdk에 내장된 android.R.layout.simple_list_item_1에 list를 넣어야 한다.

데이터를 전달 받은 adapter를 listview에 보내고 listView에 있는 아이템을 클릭시 발생되는 이벤트를 설정해 준다.

final ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,list);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                /*
                parnet->mainactivity
                position -> list 인덱스
                 */
             String selected_item = (String) parent.getItemAtPosition(position);
             textView.setText(selected_item);
           //  adapter.getPosition()
            }
        });

 

-전체 코드-

더보기

-Mainactivity.java-

package com.example.my26_listview;

import androidx.appcompat.app.AppCompatActivity;

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

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    TextView textView;
    ListView listView;

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

        textView = findViewById(R.id.textView);
        listView = findViewById(R.id.listView);

        ArrayList<String> list = new ArrayList<>();

        final ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,list);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                /*
                parnet->mainactivity
                position -> list 인덱스
                 */
             String selected_item = (String) parent.getItemAtPosition(position);
             textView.setText(selected_item);
           //  adapter.getPosition()
            }
        });

        list.add("바나나");
        list.add("딸기");
        list.add("수박");
        list.add("사과");
        list.add("오렌지");
        list.add("망고");
        list.add("키위");
        list.add("포도");
        list.add("멜론");
        list.add("두리안");
        list.add("바나나");




    }
}

-activity_main.xml-

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/holo_blue_bright"
        android:text="아래목록에서 선택하세요"
        android:gravity="center"/>

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:listSelector="@android:color/holo_green_light"/>
    <!-- 눌렷을 때 색 변경 -->


</LinearLayout>