본문 바로가기

안드로이드 스튜디오

#5 리스트뷰 (ListView)

안드로이드 스튜디오

- 리스트뷰 -


이번 포스팅은 리스트뷰에 관한 내용을 포스팅 할 것이다.

리스트뷰라는 이름만으로도 리스트의 이미지가 머릿속에 떠오를텐데 바로 그 이미지를 보여주는 위젯이 리스트뷰이다.


그럼 바로 리스트뷰의 생성과 간단한 사용법을 알아보자



[ ListView ]


생성은 어느 위젯들과 다를 바 없이 activity_main.xml 에 들어가서 생성을 해 준다.

Design 탭에서 바로 리스트뷰를 만들어주고 싶으면

Palette에서 Legacy탭에 ListView가 있는 것을 확인할 수 있다.


우리는 늘 하던대로 Text탭에서 ListView를 생성해보자.

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

간단하게 리스트뷰를 만들어봤다.

여기서 LinearLayout으로 레이아웃을 변경한 상태에서

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

~

android:orientation="horizontal"

다음과 같이 orientation의 값이 "horizontal"로 설정되어 있으면 다음과 같은 리스트뷰가 나오며


<"horizintal" 일때 listview 모습>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

~

android:orientation="vertical"

만일 orientation 값이 "vertical"로 설정되어 있다면 다음과 같이 나타난다.


<"vertical" 일때 listview 모습>



다음으로 리스트뷰 안에 데이터값을 넣는 방법을 알아보자

중요한 개념은 리스트뷰에 리스트를 넣기 위해서는 리스트 자료형을 추가로 만들어줘야 한다.

그리고 그 리스트와 리스트뷰를 연결해주는 다리역할을 해주는 어댑터가 필요하다.


우선 리스트 안에다 스트링 형의 데이터를 넣어주고 그 리스트와 리스트뷰를 연결해주는 어댑터의 사용까지 알아보자면

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);

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

data.add("Android");
data.add("Tutorial");
data.add("ListView");
adapter.notifyDataSetChanged();

}
}

천천히 살펴보자면

list = (ListView)findViewById 부분까지는 이전에 다룬 내용들이라 무난하지만 그 다음부터는 생소하게 느껴질 것이다.

List<String> dataString형의 데이터를 가질 리스트를 data라는 변수명으로 선언한 것이고

=new ArrayList<>(); 여기서 ArrayList는 배열형태의 리스트를 의미하게 된다.

그 다음줄은 ArrayList에 의해 이것을 리스트뷰에 연결해 줄 어댑터인 ArrayAdapter 형의 adapter가 생성되는 것이며

new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data); 에서 인자들을 하나씩 살펴보면

this는 현재 생성된 장소인 MainActivity를 의미하고

android.R.layout.simple_list_item_1 은 안드로이드에서 기본적으로 제공하는 리스트뷰 폼 UI를 가져온 것이다.

(쉽게 말해 기본 제공되는 디자인)

data부분은 리스트뷰와 연결할 List, 여기에선 전에 만들어놓은 List 변수를 나타낸다.


그 다음 리스트에 자료를 추가하고 싶을때는

(List형 변수) data.add("StringData"); 와 같이 추가하고싶은 데이터를 넣어주면 된다.


adapter.notifyDataSetChanged(); 는 notify 단어 뜻 그대로 변경된 데이터의 셋팅을 통보, 저장한다는 의미이다.

그냥 어댑터로 리스트와 리스트뷰를 연결하고 나서 마지막에는 꼭 notifyDataSetChange를 써줘야한다! 이정도로

알고있으면 될 것 같다.