1 / 39

9 장 리스트 고급 활용

채운표 lafen@naver.com. 9 장 리스트 고급 활용. Base. Base. Row.xml. Base. 복잡한 문제들 모든 행이 각각 레이아웃을 사용하는 경우 일부는 텍스트가 한 줄이고 , 일부는 텍스트가 두 줄인 경우 각 행에 들어가는 위젯을 행마다 따로 관리해야 하는 경우 행의 값에 따라 다른 아이콘을 사용해야 하는 경우 Adapter 클래스를 상속받아 해당 클래스를 만들고 getView() 메소드를 오버라이드 해서 행을 표시하는 위젯을 직접 만든다 . 동적인 내용. 동적인 내용.

mirabel
Download Presentation

9 장 리스트 고급 활용

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 채운표 lafen@naver.com 9장리스트 고급 활용

  2. Base

  3. Base Row.xml

  4. Base

  5. 복잡한 문제들 • 모든 행이 각각 레이아웃을 사용하는 경우 • 일부는 텍스트가 한 줄이고, 일부는 텍스트가 두 줄인 경우 • 각 행에 들어가는 위젯을 행마다 따로 관리해야 하는 경우 • 행의 값에 따라 다른 아이콘을 사용해야 하는 경우 • Adapter클래스를 상속받아 해당 클래스를 만들고 getView() 메소드를오버라이드 해서 행을 표시하는 위젯을 직접 만든다. 동적인 내용

  6. 동적인 내용

  7. 동적인 내용

  8. LayoutInflater : View오브젝트에 해당하는 XML파일의 레이아웃 인스턴스를 사용. getLayoutInflater()메소드나 getSystemService(String)메소드를 통해 현재 사용중인 컨텍스트나 실행중인 장비의 인스턴스를 검색한다. LayoutInflater를 실행한 결과로는 View 객체를 받아오는데, 실제로는 XML 레이아웃 파일에 들어 있는 대로 ImageView와 TextView를 갖는 LinearLayout 클래스를 넘겨 받는다. 레이아웃을 자바 코드로 내장할 필요 없이 코드 외부에 XML 레이아웃 파일로 만들어 쉽게 활용할 수 있다. 동적인 내용

  9. 동적인 내용

  10. 리스트 특성상 사용자가 계속해 스크롤하게 되고, 그러다 보면 화면에 특정 행이 새로 표시될 대마다 계속해서 그에 해당하는 위젯을 생성해야 했기 때문에, getView()를 사용해 리스트의 각 행을 표시하는 방법을 사용하는 것은 비 효율적이다. 스크롤 하는데 각 행별로 위젯을 생성하느라 빠르게 스크롤 되지 않는다면 사용자 측에서 사용하기 싫어질 것이다. 행별 위젯을 계속해서 만들어 내면 CPU를 더 많이 사용하고, 배터리 소모도 심해짐. 생성 작업 뿐만 아니라 사용하지 않는 객체는 가비지 컬렉터가 처리해 메모리를 반환해야 하기 때문에 비 효율적. 성능 개선

  11. 성능 개선

  12. 성능 개선

  13. 성능 개선 row = inflater.inflate(R.layout.row, null)의 원형. 파라메터가 두개인 경우는 이렇게 두개가 나오는데, 현재의 경우는 위의 것을 따라간다.

  14. ConvertView • getView() 메소드는 첫번째 인자로 convertView라고 이름짓는 View 인스턴스를 넘겨 받는다. Null인 경우도 있는데, 그런 경우에는 인플레이션 등의 방법을 사용해 새로운 View 인스턴스를 만들어 리턴하면 된다. • convertView값이 null이 아니라면 그 값은 예전에 getView() 메소드에서 생성했던 View인스턴스 가운데 하나다. • 리스트 스크롤을 하는데, 스크롤해서 보이지 않게 된 행에서 사용하던 위젯을 재 사용해 매번 위젯을 생성하지 않도록 안드로이드 시스템에서 getView() 메소드에 인자로 넘겨준다. • 리스트의 각 행이 동일한 구조로 만들어 졌다면 findViewById() 메소드로 행 내부의 개별 위젯을 찾아와 내용을 변경. 새로운 위젯을 생성하는 대신 변경된 convertView 위젯을 getView() 메소드 결과로 리턴한다. 성능 개선

  15. findViewById() 메소드 • In Developer.android.com • Look for a child view with the given id. If this view has the given id, return this view. • 화면을 꾸미는 데 있어 많이 사용을 하지만 비효율적. • 인플레이션으로 생성한 위젯 가운데 주어진 ID와 일치하는 위젯을 찾는데 특정 위젯의 속성이나 내용을 변경하려면 반드시 사용. • 위젯 내부의 객체 트리에서 원하는 객체를 얼마든지 찾을수 있지만, 연산 양이 많다. 같은 객체를 찾을때 마다 findViewById()메소드를 호출한다면 효율성이 크게 떨어진다. 홀더 패턴

  16. setTag() , getTag() • 모든 View객체는 setTag()와 getTag()를 가지고 있다. • 객체마다 원하는 데이터를 넣어 둘 수 있도록 준비된 메소드 • 각 View객체마다 이 태그를 활용해 나중에 사용할 내부 위젯을 캐시해 두는 방법. • 각 행의 View에 홀더 객체를 태그로 설정해두고, 해당하는 행을 사용할 때는 필요한 내부 객체에 대한 참조를 모두 갖고 있기 때문에 findViewById() 메소드를 매번 호출할 필요가 없다. 홀더 패턴

  17. 홀더 패턴

  18. 홀더 패턴

  19. 홀더 패턴

  20. RatingBar 클래스 • 인터랙티브한 위젯을 리스트에 간단하게 넣어 사용할 수 있다. • 단, 인터랙티브한 위젯 상태가 변경될 때 그에 대한 내부적인 작업을 진행하도록 구성하기가 약간 복잡하다. 원하는 대로 만들기

  21. RatingBar : A RatingBar is an extension of SeekBar and ProgressBar that shows a rating in stars. The user can touch/drag or use arrow keys to set the rating when using the default size RatingBar. The smaller RatingBar style ( ratingBarStyleSmall) and the larger indicator-only style (ratingBarStyleIndicator) do not support user interaction and should only be used as indicators. When using a RatingBar that supports user interaction, placing widgets to the left or right of the RatingBar is discouraged. The number of stars set (via setNumStars(int) or in an XML layout) will be shown when the layout width is set to wrap content (if another layout width is set, the results may be unpredictable). The secondary progress should not be modified by the client as it is used internally as the background for a fractionally filled star. 출처 : http://developer.android.com/reference/android/widget/RatingBar.html 원하는 대로 만들기

  22. 원하는 대로 만들기

  23. 원하는 대로 만들기

  24. 원하는 대로 만들기

  25. 원하는 대로 만들기

  26. 원하는 대로 만들기 Viewwrapper.java

  27. 원하는 대로 만들기

  28. 원하는 대로 만들기

  29. 원하는 대로 만들기에서 조금 더 향상된 모습을 이번 절에서 만들어 본다. 다시 살펴봅시다!

  30. XML레이아웃에 RateListView클래스 추가 다시 살펴봅시다!

  31. 다시 살펴봅시다!

  32. 다시 살펴봅시다!

  33. 다시 살펴봅시다!

  34. 다시 살펴봅시다!

  35. 다시 살펴봅시다!

  36. 다시 살펴봅시다!

  37. 다시 살펴봅시다!

  38. 다시 살펴봅시다!

  39. 다시 살펴봅시다!

More Related