Android 개발 Tip - 13. HashMap Loop

Mobile Programming/Android Tip 2011. 11. 28. 22:24

HashMap 은 keySet 과 valueSet으로 이루어져있다 .
필자는 주로 키가 같은경우에 같은 객체를 수정해야할 때 이용하는 편이다 . 

각각의 아이템을 볼때는 키값으로 get해주면 되지만 ,  
해당 해쉬맵을 전체적으로 loop 체크 할때는 다음과 같은 방법을 이용한다.


Iterator iterator = map.keySet().iterator();
 while (iterator.hasNext()) {
          String key = (String) iterator.next();
          Item item = map.get(key);
          Log.d(TAG, "name " + item.name );
 }

Android 개발 Tip - 12. ListView 를 작성할때 체크 해야 할 것.

Mobile Programming/Android Tip 2011. 10. 6. 10:26

1. ListView 스크롤시 배경색이 바뀐다 .

-  안드로이드 시스템이 성능을 위해 테마를 통해 얻은 색상으로 배경화면을 불러온다.
이러면 스크롤시에 색상이 바뀌는데,이런 문제점을 해결하기 위해
android:cacheColorHint 값을 지정한다. 

 
2.  GetView 의 중복 호출

- wrap_content 의 경우 발생. 필자 생각으로는 wrap 은 내부의 크기를 알아야하기 때문에 일단 getView가 호출되면 다시 내부의 크기를 얻은후 돌아오는 과정이 필요하기 때문에 getView 가 중복으로 호출되는 것으로 보인다.


3. CheckBox 나 Button과 같은 아이템들을 리스트뷰 안에 넣었다.

- focusable을 false 로 해야 리스트뷰가 포커싱 될 수 있다.  

Android 개발 Tip - 11. 동적으로 Layout을 생성했을때 잊지 말아야 할 것..

Mobile Programming/Android Tip 2010. 12. 1. 14:05

외부클래스로 View를 상속한 클래스를 만들고 ,
이 클래스에서 특정 함수가 호출되면 invalidate 하여 onDraw가 호출되도록 구성하는 간단한 문제에서,
아무리 invalidate를 해도 onDraw가 호출되지 않는 상황에 직면했다.

이 상황에서 생각해 봐야 할 몇가지.

 이 View가 현재 Invisible한 상태는 아닌가 ?

1. Layout parameter 등을 고려해보자.
2. 해당 클래스가 다른뷰에 가려져 있지 않은가.


필자의 같은 경우에는 2번에 해당했다.
물론 이 문제에 직면했을때 이 생각을 안한 것이 아닌데 , 이 이유는 아닐것이라고 단언해 많은 삽질을 했다.

이 이유가 아닐것이라고 단언한데는 그만한 이유가 있었는데 ,

해당 Layout에는 두개의 뷰가 있었다.
하나가 텍스트뷰고, 하나가 바로 onDraw가 호출되지 않는 문제의 View 상속 클래스.
텍스트뷰의 크기를 new LinearLayout.LayoutParams(LinearLayout.LayoutParames.Fill_Parent, ...Wrap_content)
와 같이 주었기때문에 텍스트뷰가 절대 View를 덮지 않을 것이라는 확신이 있었기 때문이다.

지인까지 동원해서 몇분을 고민한 끝에 , 원인을 알아낼 수 있었다.

LinearLayout.setOrientation 을 .. 호출하지 않았던 것 ㅡㅡ ...

당연히 디폴트 값으로 Vertical이라고 생각했는데 ,
Orientation은 horizontal이 Default 이다..

때문에 텍스트뷰가 layout_width를 모두 점유해 버렸기 때문에 오른쪽에 나오고싶었던 view는 공간을 점유하지 못했다..