본문 바로가기
프로젝트/Android

Android에서 SpreadGrid UI 만들기

by 1005ptr 2018. 9. 8.
반응형

Android에는 C#의 SpreadGrid(엑셀 Sheet)같은 뷰가 없다.


이를 대체할 수 있는 UI는 Grid와 List

https://www.digitalsurgeons.com/thoughts/creative/list-vs-grid-view-how-do-you-choose/



보여줄 데이터의 한줄 한줄이 하나의 덩어리인 경우 ListView가 맞다.

ListView를 만들때 구성요소는 크게 네가지다.

1. ListView : 리스트 UI

2. ListAdapter : 리스트 뷰와 ItemView를 연결해주는 역할

3. ItemView : 리스트 한 칸의 UI

4. Item : 데이터


흐름

리스트 어댑터에 데이터를 등록하고, 리스트뷰에 리스트 어댑터를 장착한다.

리스트뷰는 리스트 어댑터에 몇번째 위치(index)에 그릴 ItemView를 달라고 요청한다.(GetView)

리스트 어댑터는 해당 index의 데이터를 꺼내서 ItemView 껍데기에 입힌다.

데이터를 입힌 ItemView를 반환한다.

반복


리스트뷰의 기본 UI

ItemView는 TextView 하나만 들어있는 단순한 형태

Item은 행성이름만 가지고있다.


아이템뷰를 다양한 모양으로 커스터마이징 할 수 있다.

첫번째만 얘기해보자. 숙박정보를 리스트뷰로 보여주며

ItemView는 이런 모양(ImageView 하나에 TextView 몇개)


Item에는 사진, 위치, 설명, 가격, 침대, 화장실, 차고 개수가 들어있다.



SpreadGrid UI는 기본적으로 스마트폰 화면에 적합한 UI가 아니다.

보통 사용한다 하면 Tablet에서 사용된다.

아래처럼 만들려면?

ItemView를 이렇게 만들면 된다.(TextView의 나열)



이 View, Adapter 관계는 여기저기서 나온다.

하나더 신경쓸점은 GetView 메서드의 contentView 매개변수

안드로이드는 핸드폰에서 사용되는 앱이므로 자원이 컴퓨터에 비해 작다.

그래서 자원을 아끼기 위한 기능이 기본으로 달려있는데 contentView가 그런것.

리스트뷰는 현재 액정에 보여지는 ItemView만 메모리에 유지한다. (전체 데이터를 불러오는게 아님)

그리고 View, 화면에 보여지는 Component를 새로 만드는(new)건 꽤 무거운 일이다.

contentView는 이 두가지 사실을 가지고 메모리를 효율적으로 쓰기 위해 화면에서 벗어난 ItemView를 가져와서 데이터만 바꿔끼워서 다시 보여주는 식으로 사용한다.

이렇게 contentView로 재활용하는 방식도 여기저기서 나온다.

이거때문에 통신상태가 안좋거나, 사진같은거 불러올 때 다른 데이터가 잠깐 보였다가 바뀌는 경우가 발생한다.





반응형

'프로젝트 > Android' 카테고리의 다른 글

ListView에 클릭리스너 달기  (0) 2018.09.24
ListView의 Choice Mode  (0) 2018.09.24
Thread와 static 변수  (0) 2018.09.18
자원재활용 contentView  (0) 2018.09.08

댓글