670 likes | 956 Views
만들면서 배우는 Android 세미나. 2 . SPARCS 11 KAIST 11 최낙현 ( bbashong ). 오늘도 . AVD 를 미리 켜두자 새로운 프로젝트를 만들자. 오늘의 목표. 이상형 리스트 만들기. 시작은 layout 부터. MainActivity.java. WHAT ARE WE DOING?. ArrayList 가 뭔가요 ? java 기본 library 에 포함되어있다 .
E N D
만들면서 배우는 Android 세미나 2. SPARCS 11 KAIST 11 최낙현(bbashong)
오늘도.. • AVD를 미리 켜두자 • 새로운 프로젝트를 만들자
오늘의 목표 • 이상형 리스트 만들기
WHAT ARE WE DOING? • ArrayList가 뭔가요? • java 기본 library에 포함되어있다. • 객체를 담을 수 있는 Array인데 크기가 고정되어 있지 않아 맘대로 넣었다 뺐다 할 수 있는 array이다. • ListView가 뭔가요? • View들을 스크롤 할 수 있는 리스트로 나타내 주는 “ViewGroup”이다. 하나의 안드로이드 앱 대부분을 ListView가 차지한다. 못믿겠으면 페이스북앱,gmail앱, 카카오톡 뭐든 열어보라. • Adapter가 뭔가요? • data와 listview를 연결해 주는 매개체 이다. • listview의 한줄 한줄에 해당하는 View도 만들어서 넘겨준다. • ArrayAdapter는 Array에서 data를 얻어 ListView에게 넘겨준다.
WHAT ARE WE DOING? • Adapter의 constructer가 parameter로 Context context를 받던데 context가 뭔가요? • Application, Activity, 이 두가지는 context를 상속한다.(즉 Activity는 context이다.) • View가 activity의 lifecycle과 잘 동기 되려면 context의 정보가 필요하기 때문에 parameter 로 받는다. • 그래서 this를 넣어주었다.(this-> MainActivity객체 ->Activity 객체 ->Context 객체)
WHAT ARE WE DOING? • android.R.layout.simple_list_item1 이게뭐죠? • 우리가 id나 layout을 찾는데 R.blah.blahblah를 이용했었다. • android.R.???은 android에 기본적으로 내장되어 있는 layout과 id이다. • 즉 android에 기본적으로 내장된 layout을 listview의 한 row로 쓰고싶어서 이렇게 한 것이다. • setAdapter는 당신이 생각하는 바로 그거
Question • Activity 코드안에 data를 삽입하는 코드가 (items.add) 껴있으니 보기도 안좋고 쓸데없이 지저분하고 코드도 길어지고 영 별로네요 • Singleton 객체를 만든뒤 그 객체의 member변수로 선언하자. • 또는 android 의 resource라는 기능을 이용하자. • 자세한 설명은 생략한다. 궁금하면 찾아보길
Question • 이름만 가지고는 이상형을 판별할 수 없어요!!!listview에 키, 몸무게, 연봉도 넣고싶습니다! • Custom Adapter가 필요하다. • 커.스.텀.어.댑.터??? • 기본적으로 제공되는 adapter는 listview의 한 row로 1개의 textview밖에 이용하지 못한다. • ArrayAdapter를 상속하는 Custom Adapter로 listview의 row를 더 기능성있게 바꿔보자.
작업설명 • 1. 일단 이상형 정보를 담을 class IdealGirl (또는 IdealBoy) 를 만든다. • IdealGirl이 들어있는 array와 listview를 연결해 줄 IdealArrayAdapter를 만든다.
IdealGirl만들기 • 알려주는 eclipse사용법을 숙지하세요!
new class package 우클릭 ->new -> class
우클릭 ->source -> Generate Getter and Setter 모두 체크하고 ok
Custom Array Adapter를 만들기 전에.. • listview의 row 를 나타낼 layout 부터 만들자.
Typing Time • 다음과 같이 작성하자 • text 속성은 사실 필요 없지만, 잘 배치됬는지 확인하기위해서 삽입됨.
Custom Adapter를 만들자. • 따라하세요
new class, Name과 superclass 설정 저기서도 자동완성 가능!
우클릭->source->override/implement method getView선택한 뒤 ok
MainActivity.java수정 맨끝에 빨간 밑줄은 무시
what are we doing - IdealAdapter.java • super(context, 0, list);에서 0은 뭔가요? • 두번째 parameter는 row로 사용할 layout을 의미하는데, 우린 getView함수에서 layout을 지정하기때문에 그냥 0으로 지정했다. • getView함수가 뭔가요? • listview가 각각의 position 에 해당하는 row의 view를 만들 때, 이 getView함수를 통해 view를 얻어간다. • 따라서 우리가 이 함수를 override해주면 우리가 원하는 view가 해당 position 의 row로 들어간다.
what are we doing - IdealAdapter.java • inflator가 뭔가요? • layout에서 view객체를 만드는 과정을 inflate라고 설명한 적이 있다. • inflate를 해주는 객체가 inflator이다. • singleton이기 때문에 constructor가 아닌 LayoutInflater.from(context)를 통해 객체를 얻는다. • singleton이 뭔지 모르면 일단 무시하자.
what are we doing - IdealAdapter.java • convertView가 뭔가요? • 길이가 100인 listview가 있다고 해보자. • 그럼 100개의 view가 필요할까? • 100개의 view를 만들면 성능이 어떻게 될까? • 실제로 필요한 view는 화면에 보이는 10여개이다.
view의 재사용 • 화면 밖으로 벗어난 view는 recycler로 들어간다. • 그리고 새로운 view를 만들어야 해서 getView함수를 호출할 때,parameter로 recycler에 있는 view 를 넣어준다. (없으면 null) • 이 view를 convertview라고 한다. • 따라서 우리는 convert view가 null이 아니면, 새로운 view를 inflate할 필요 없이,view의 내용물만 바꿔주면 되는 것 이다.
Question • convertview를 이용해서 view를 재사용 하는건 좋다. 그런데, 같은 view를 이용하면서 매번 findViewById로 view들을 찾는 것도 낭비 아닌가? • ViewHolder 패턴을 이용하자.
What are we doing? • ViewHolder패턴이 뭔가요? • view를 멤버 변수로 가지는 객체를 만든다.(이름은 뭐든 상관 없음.) • row_view를 만들 때 마다,row_view에서 findViewById를 통해 얻은 view들을 ViewHolder객체에 멤버변수로 저장시킨다. • 나중에 convertview로 이 view가 돌아왔을 때, 다시 findviewbyId를 하여 리소스를 낭비하지 않고, 바로 원하는 view들을 얻을 수 있다.
ListView에 동적으로 item 넣고 빼기 • 자 이제 listview에 item을 동적으로 넣고 빼는 방법을 배워보자. • 그전에 Intent에 대해 알아보자.
Intent • 말 그대로 “의도” • explicit intent와 implicit intent로 나뉜다. • implicit intent는 각자 공부하고 지금부터 intent라고 하면 전부 explicit intent를 의미한다고 생각하자. • http://www.vogella.com/articles/AndroidIntent/article.html
ListView에 동적으로 item 넣고 빼기 • 과정 • 1. 새로운 activity 만들기 (AddIdealActivity.java) • 2. 새로운 activity를 위한 layout 만들기 • 3. 새로운 activity에서 MainActivity로 데이터를 보내는 함수 만들기 • 4.MainActivity.java에서 AddIdealActivity를 호출하고 결과가 왔을때 listview에 추가하는 함수 만들기
add_format.xml(new xml) 실수로 Button에 ID를 안줬으니 “@+id/done”으로 주자
Wait • imeOption=“actionNext”가 뭔가요? • 그냥 엔터치면 다음칸으로 넘어가라는거에요.. • actionDone은요? • 끝났으니까 키보드 닫으라는거에요..
AndroidManifest.xml • 프로젝트 를 잘 뒤져보면 AndroidManifest.xml이라는게 있어요 • application 의 설정, 정보를 담고있음 • 새로운 Activity를 만들려면 여기에 꼭 추가를 해줘야함.