[안드로이드] ListView 사용하기
순서
1. activity_main.xml에 listview 추가
2. listview_item.xml 만들기
3. data class 만들기
4. MainActivity에 ArrayList 만들기
5. ArrayList 만들어서 add로 데이터 넣기
6. Adapter 만들기 (BaseAdatper 상속)
7. MainActivity에 Adapter 셋팅하고, ListView에 셋팅한 Adapter 넣기
어휴 굉장히 복잡한게 하나씩 까먹기 전에 해보자!
나같은 경우는 Activity위에 ListView를 올리는 작업은 인터넷에 많이 있기도 하고,, Fragment에 ListView를 사용해보았다.
그리고 지그재그 클론코딩 중이다!
1. activity_main.xml에 listview 추가
위의 화면은 프래그먼트의 xml이다. 전체를 NestedScrollView로 설정해주고 안에 ListView를 넣어주었다.
2. listview_item.xml 만들기
그리고 즐겨찾기한 리스트를 보여주기위한 item.xml을 생성해주었다.
이때 View하나하나에 대한 id값을 부여해주는 것은 필수! 왜냐면 나중에 View에 접근해 데이터를 바꿔줘야하기때문이다.
3. data class 만들기
Data class를 만들어주고 이름을 ShoppingmallCard로 해주었다. 안에 데이터는 쇼핑몰 이름을 넣어줄 name, 그리고 할인해준다는 contents, 쇼핑몰 사진을 위한 img. 이때 img는 int형으로 해야한다.
4. MainActivity에 ArrayList 만들기
앞에서 만든 dataClass를 사용하기 위해 ArrayList를 만들어준다.
5. ArrayList 만들어서 add로 데이터 넣기
급하게 캡처하느라 중간에 조금 가려졌는데 add 함수를 이용하여 앞서 만든 arrayList에 각각의 데이터를 넣어준다.
6. Adapter 만들기 (BaseAdatper 상속)
그리고 리스트뷰와 아이템을 하나씩 연결해주기위한 어댑터를 생성한다. BaseAdapter를 상속받아야한다.
파라미터로는 Context와 아까만든 ShoppingmallCard 클래스의 ArrayList를 넣어준다.
그리고 inflater를 만들어주는데, 이거는 나중에 getView에서 쓰인다.
– int getCount() : 리스트 객체 내의 item의 갯수를 반환해주는 함수. 리스트 객체의 size를 반환해주면된다
– Object getItem() : 전달받은 position의 위치에 해당하는 리스트 객체의 item를 객체 형태로 반환해주는 함수.
– long getItemId() : 전달받은 position의 위치에 해당하는 리스트 객체의 item의 row ID를 반환해주는 함수.
- getView() : Adapter 가 가지고 있는 data 를 어떻게 보여줄 것인가를 정의하는데 쓰인다.
그리고 위의 네개의 추상메소드를 구현해주는데,
여기서 중요한 함수는 getView()이다. ListView에 보여줄 각각의 Item의 View를 가져와 데이터를 설정해준다.
그리고 앞에서 생성된 inflater에서 inflate() 함수를 사용하였다. 이 함수는 xml로 된 layout 파일을 View 객체로 변환해주는 함수이다.
아이템의 개수만큼 getView함수가 실행되면서 View 객체를 만들어준다.
7. MainActivity에 Adapter 셋팅하고, ListView에 셋팅한 Adapter 넣기
만든 어댑터를 여기서 불러와서 객체를 만들어주고 파라미터에 아까 Context와 ShoppingMallCard 형태의 arrayList를 넣어줘야하는데, 문제는 지금 이 파일은 프래그먼트를 상속받았기 때문에 this로 넘겨주지 못한다. (파라미터 타입이 안맞음) 그래서 this.requireActivity()로 넘겨줘야한다.
그리고 listView의 아이디값을 가져와서 어댑터 객체를 붙여준다.
그럼 완료 ~ ^*^
각각의 함수에 대한 이해와 inflater 등 ListView에 원리를 좀더 자세히 알고싶다면 여기를 참고!