기본 콘텐츠로 건너뛰기

12월, 2011의 게시물 표시

JSONObject 전용 CustomView Adapter를 만들었다.

질보다 양이 우선하는 허접안드로이드 프로그램 의뢰를 처리해주고 있다.
어찌나 기능들이 다양한지 덕분에 스터디는 제대로 하네 ㅎㅎ
하다보니 리스트들이 엄청 많은데
SimpleAdapter 로 대충 하려고 했더니 요리조리 잘도 빠져들 나가서
커스텀 시리즈를 하나씩 종류별로 다 만들고 있다.
SimpleAdapter를 선호하는 편인데 Hash Map 에만 넣어주면 이미지건 뭐건 알아서 잘 해주니까 좋다.

myAdapter = new SimpleAdapter(this, groupData, R.layout.couponlist,

new String[] { "title", "desc" }, new int[] {

R.id.textViewListTitle, R.id.textViewListDesc });

mListView.setAdapter(myAdapter);


대략 이런식.

1.context 를 주고,

2.Map의 ArrayList 형을 받고,

3.리스트를 표현할 Layout을 정하고

4.리스트에 값을 가져올 Map의 키와

5. 그 키값에 대응하는 List안의 View들을 대응

이것만으로 오케이

물론 이것마저도 사실 지저분하고 더러운 코드로 보이지만 자바에선 이정도면 짧은 코드인편

그런데 이걸 Custom으로 구현하면 갑자기 일이 커진다.

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List4.html

나는 짜증나서 이짓 못하겠다.

일단 서버나 array.xml 등등에서 JSON을 다루는 일이 대부분이라서

SQLite DatabaseAdapter (어라 이것도 만들었네)에서도 그냥 죄다 키발키발(key:val)해버렸다.

하나 만들고 리팩토링하면서 생각해봐야지 하고 촥 만들고 보니

Custom ListAdapter라고 해봤자. 결국 getView 만 외부에서 콜백으로 지정할 수 있으면 나머지는 매번 작성할 필요가 없다는 생각…

왜 object에 prototype을 쓰지 않나?

http://triin.net/2009/09/13/Why_exactly_is_Object.prototype_verboten
이유는 이렇다. prototype 에 method 를 정의하면 자기 자신도 해당 object 에 카운트가 된다.
무슨말이냐? object (array포함) 의 key와 value를 보기 위해 종종 아래와 같이 해본다. var ages = {  John: 10,  Mary: 28,  Alice: 16}; 일때 (function(obj){ for (idx in obj) { console.log(idx+':'+obj[idx]) }})(ages)  이렇게 떠 보면 John:30 Mary:30 Alice:30 뭐 이렇게 나오겠지.
그럼 아예 object 에 이걸 prototype 해서 그냥 method 로 만들지 싶어
Object.prototype.printObject=function(){ for (idx in this) { console.log(idx+':'+this[idx]) }}; 요따우로 해주면
ages.printObject() > John:10 > Mary:20 > Alice:30 > printObject:function (){ for (idx in this) { console.log(idx+':'+this[idx]) }}
망한다. 다시 이야기 하지만 자기 자신도 객체의 일부가 되니까. 그래서 쓰지말라는 것이다.
hasOwnProperty를 사용해서 피해가는 방법도 있겠지만 다른 문제가 있다. 자세한 설명은 생략한다. 왜 그런지 알고 싶으면 본문 봐라. (난 알고싶지 않아서 안봤다. 안쓸거니까 우왕ㅋ)
결론은 이거다. defineProperty 를 사용하자. ECMAScript 5 스펙이다. 하지만 망할 IE7 에선 안되겠지 http://ejohn.org/blog/ecmascript-5-objects-and-properties/ (꼼꼼히 읽어볼 필요가 있다) 사용법이 좀 뜨…