이 블로그 검색

2011년 10월 11일 화요일

딜레이 주기

Handler mHandler = new Handler();
mHandler.postDelayed(new Runnable() {
        public void run()
        {
        Util.log("delay"); 
        }
       }, 500); //Delay time

2011년 10월 10일 월요일

프로그래밍 문제 해결 팁 1

거의 비슷한 뷰를 복사해서 쓴 적이 있는데
플리킹이 한 쪽은 되고 한 쪽은 되지 않은 적이 있었다.

이 문제를 해결하느라 엄청 삽질을 했느데,
결국 해결의 실마리는 로그캣에 많은 로그를 남기는 것이었다.
전혀 상관없어 보이는 코드에도 로그를 쓰고 비교를 해보니...
문제가 생긴 쪽에는 플리킹을 할 때마다
getView 호출하는 코드를 더 추가적으로 넣은 것을 알았다.
따라서 플리킹을 할 때마다 계속해서 getView를 호출하다 보니 이미지들이 움직일 수가
없는 것이었다.

로그가 없었으면 이 문제를 발견할 수 없었을 듯 하다.
정 안될 때는 상관없어 보이는 코드에도 밑져야 본전이니 로그를 남겨둬 보자..
자신이 전혀 짐작하지 못한 의외에 곳에서 한 실수를 찾을 수 있다.

2011년 10월 9일 일요일

안드로이드 리스트 복사

각종 리스트(ArrayList 등 포함)를 통째로 똑같이 복사하려면
addAll 메써드를 써야 한다.

예를들어,
ArrayList<String>sList = new ArrayList<String>();
sList.add("a");
sList.add("b");
sList.add("c");
sList.add("d");
 
ArrayList<String>tList = new ArrayList<String>();

tList = sList; (X) <-- 이런식으로 하면 안된다.. 왜냐면 tList가 변함에 따라 sList도 변한다.

tList.addAll(sList); (O)  <--- 이렇게 해야 한다. 

tList.add("e");  <-- 이럼에 따라, sList에도 "e","f" 가 추가된다.
tList.add("f");          왜냐면 tList = sList 하면 두 리스트의 주소값을 공유하게 되기 때문이다.






  

2011년 9월 30일 금요일

좋은 코딩 습관

1. 변수, 메서드의 첫째 문자는 소문자로 쓰고, 클래쓰 명은 대문자로 시작한다.

2. Naming 에 신경 쓴다. 너무 길게도 적게도 쓰지 않는다.

3. warning 을 다 잡는다.

이클립스 꼭 사용해야 할 단축키

1. CTRL+SHIFT+G  --> 레퍼런스 :  지정한 변수나 메서드가 사용되는 부분을 전 영역에서 찾는다.

2. ALT+SHIFT+R ---> 리펙터 : 변수나 메서드, 클래쓰 등의 이름을 변경할 때 사용된 모든 영역에서 바꿔준다.

3. ALT+SHIFT+O  --> 임포트 정리

4. CTRL + D --> 한줄 지우기 (매우 간편함) , 영역 지정후 하면 영역 지우기.

5. 영역 지정후 CTRL+SHIFT+F -->  지정한 포맷으로 코드 정리.

6. CTRL + I  -->  자동 들여쓰기.

7. SHIFT + ALT + S, --> R : Getter, Setter 자동 생성

8. CTRL+SHIFT + SPACE : 메소드 파라메터 힌트

9. CTRL + Q : 마지막 편집 위치로 이동

10. CTRL + J: 입력하면서 Search

11. try, for 입력후 Ctrl+ Space : 자동완성

12. CTRL + 1 : Quick Fix (구현하지 않은 메소드 추가, 행 둘러싸기(if, while, for, switch), 로컬 변수 이름 바꾸기)

13. F2 --> 에러 원인에 대한 힌트. 에러난 줄에 F2입력

14 CTRL + T : 하이어라키 팝업(인터페이스 간, 상속 간 클래스 이동)

15. CTRL + O : 현재 편집 화면의 메소드나 필드로 이동

16. CTRL +ALT + 상하 키 : 한 줄을 통째로 복사

17. CTRL + 좌우 키 : 대문자, 공백, 기호 등이 나오는 곳으로 커서 이동

18. CTRL + 상하 키: 마우스 스크롤 효과

19. CTRL + 마우스 스크롤 : 상하로 페이지 단위로 크게크게 움직임

20. CTRL+SHIFT+E : 열려있는 탭을 리스트로 보여 줌, 선택 후 이동 및 창 닫기 가능

21. CTRL + F6 : 열려있는 파일(탭) 들을 이동.  F6누르면 위에서 아래로, CTRL+SHIFT+F6 누르면 아래에서 위로

22. CTRL+ F7 : 뷰간 전환

23. CTRL + F8: 퍼스펙티브간 전환

24. CTRL + SHIFT + R : 리소스 찾기(키워드로 리소스 파일(이미지, 스트링, xml 등)들을 찾을 수 있다.)

25. CTRL + SHIFT + 상,하 키 : 메서드 단위로 이동

26. F12 : 에디터로 포커스 이동

2011년 9월 10일 토요일

DB.rawQuery 와 DB.execSQL - select 문과 insert, update 문의 실행

1. db.rawQuery(SQL쿼리)  - select 문과 같이 결과값을 얻는 경우

Ex)
Cursor cur = db.rawQuery("select * from Table1",null)

2. db.execSQL(SQL쿼리) -insert, upadate 와 같이 결과 값이 없는 경우

Ex)
db.execSQL(updatae table1 set selFlag = "true"

단순한 것 같지만..
이것도 모르면 엄청 헤멘다...

2011년 9월 9일 금요일

OnItemClick 에 체크 박스(CheckBox) 연동

우선 체크박스에, focusable, clickable을 모두 false 로 설정한다.
setXXX() 메서드를 사용해도 되고, 직접 xml에서 설정해도 된다.

예)
   vCheckBox.setFocusable(false);
   vCheckBox.setClickable(false);

그 후, 리스트 뷰의 onItemClick 메서드 안에

vCheckBox = (CheckBox)(this.getChildAt(position).findViewById(R.id.del_check));
넣는다. (현재의 리스트 뷰 위 이므로 this를 썼다. 만약 곳이라면 list.getChildAT ~~ 쓰면 된다.)

 
 public void onItemClick(AdapterView<?> adaptView, View view, int position,long id)
 {
  boolean checkTemp;
  WishListDBHelper helper = new WishListDBHelper(this.getContext(), "WishListDB" , 1);
  db = helper.getWritableDatabase();
  
  vCheckBox = (CheckBox)(this.getChildAt(position).findViewById(R.id.del_check));

  ................
  ...............
}