13. 학습목표
이 학습을 마치면…
-Intent를 사용해 다른 Activity로 전환을 할 수 있습니다.
!
-android.R.layout.simple_list_item_1 을 사용하여 한줄이 표시되는
리스트뷰를 만들 수 있습니다.
!
-android.R.layout.simple_list_item_2 을 사용하여 두줄이 표시되는
리스트뷰를 만들 수 있습니다.
!
-ArrayAdapter를 직접 만들어 자신이 원하는 레이아웃을 가지는
리스트뷰를 만들 수 있습니다.
14. Main
SimpleList1
리스트에 글을 한줄씩 출력하는 리스트뷰 실습
Intent를 사용하며 Activity이동
앱 시작시
실행되는 Activity
SimpleList2
리스트에 글을 두줄씩 출력하는 리스트뷰 실습
CustomList
리스트뷰의 레이아웃을 직접 구현하는 실습
rowLayout
구현할 앱의 구조
34. Main
SimpleList1
리스트에 글을 한줄씩 출력하는 리스트뷰 실습
앱 시작시
실행되는 Activity
SimpleList2
리스트에 글을 두줄씩 출력하는 리스트뷰 실습
CustomList
리스트뷰의 레이아웃을 직접 구현하는 실습
SimpleList1과 같은 Activity가 2개 더 필요합니다.
45. Intent
안드로이드에서는 액티비티 간의 화면 전환에
인텐트(Intent)를 사용합니다.
!
단순히 화면 전환을 의미하지는 않으나
이 예제에서는 다른 액티비티를 호출하고 호출 될 액티비티에
간단한 값을 전달하는 방법을 알아봅니다.
46. Intent intent = new Intent(this, 이동할액티비티.class);
startActivity(intent);
간단히 화면 전환을 위해서는 Intent를 생성하고
생성자로 현재 액티비티의 컨텍스트와
(컨텍스트에 대한 설명은 안드로이드 베이직에서 합니다.)
이동할 액티비티 클래스의 객체를 써주고
!
startActivity(intent)를 해주면 됩니다.
48. MainActivity
Activity2
호출된 액티비티에서 데이터를 받을 때에는
getIntent().getExtras().getString(“키값”);으로 합니다.
꼭 String이 아니라 Int나 다른 자료형도 가능하나
!
객체를 보낼때에는 package라는 것을 사용하지만
이 예제에서는 다루지 않습니다.
63. Simple1 실습에서는 리스트에 데이터를 보여주기 위한 어뎁터로
ArrayAdapter를 사용합니다.
!
ArrayAdapter에 UI레이아웃과 데이터를 넣어주고
setAdapter()로 ListView에 Adapter를 적용시키는데
!
UI레이아웃을 안드로이드에서 기본 제공하는
simple_list_item_1을 사용하여 하나의 텍스트뷰가 있는 한줄짜리 레이아웃으로 표시합니다.
64. 데이터가
리스트뷰에 맞게 잘 출력되었습니다^^
참고로 simple_list_item_1은
단순히 TextView가 하나있는
레이아웃xml파일입니다.
68. 값을 넣어줄 때에는 HashMap을 생성해서
먼저 HashMap에 값을 put()으로 넣어준 후
ArrayList에 HashMap을 넣어줍니다.
!
HashMap의 키캆은 여기서는 임의로 line1과 line2로 설정하였습니다.
line1을 키값으로 가지는곳에 첫번째 줄에 올 데이터를,
2에는 두번째 줄에 올 데이터를 넣을 예정입니다.
69. 2줄짜리 simpleList를 사용하기 위해서는
String 배열과 int 배열이 필요합니다.
!
String 배열에는 데이터를 가져올때 사용할 HashMap의 키값을
int배열에는 android.R.layout.simple_list_item_2에서 사용할
TextView위젯의 id값이 필요합니다. (고정된 id)
70. SimpleAdapter를 생성하고 데이터 리스트(hashMapList1)와
UI레이아웃(android.R.layout.simple_list_item_2),
그리고 아까 설정한 배열값 (from, to)를 넣어주고
ListView에 어뎁터를 연결해 줍니다.
71. 데이터가
리스트뷰에 맞게 잘 출력되었습니다^^
참고로 simple_list_item_2은
TextView가 두개있는
레이아웃xml파일입니다.
95. 아까 만든 ListData를 가지는 ArrayAdapter를 상속받고
생성자에 Context, UI레이아웃의 id, 그리고 ArrayList데이터를 받습니다.
96. ArrayAdapter에서 중요한 부분인 어떻게 보여주것인지에 대한 부분은
getView()에 있습니다.
직접 만든 UI레이아웃에 맞게 고치기 위해
getView()를 오버라이딩 하여 수정을 해야합니다.
97. inflate라는 것은 xml로 정의되어 있는 뷰나 레이아웃을
객체화 시키기 위해서 사용하는 메서드 인데
이 예제에서 간단히 설명을 하자면
-리스트에 보여줄 항목이 있는데 이 항목의 레이아웃을
전에 만든 custom_list_row.xml을 불러와서 사용하는 장면입니다.
98. inflate로 만든 row로부터 텍스트뷰를 인스턴스로 만들어
글씨를 집어 넣습니다. 평소와 달리 row.findViewById()로 row.을 붙여
row의 텍스트뷰를 가져오도록 합니다.
108. 레이아웃에 맞게
사진 크기를 조절하거나
!
메모리를 관리하는 부분이 없어
기종에 따라 화면이보기 흉하게 되거나
OutOfMemory가 발생하는 경우가
있습니다.
!
이럴때에는 레이아웃 파일을 수정을하여
자신의 기종에 맞는 설정을 하거나
!
메모리 부족이 발생할 때에는
이미지를 축소해서 사용해 주세요