티스토리 뷰
프로그램 특성상 ListView의 사용이 많아서 여기에 정리한다.
ListView를 사용하기 위해서는 다음의 재료가 필요하다.
내용이 들어있는 Item의 Array, ListView 객체, 이 둘을 연결해 줄 Adapter, item의 내용이 들어갈 item layout(xml파일)
Item은 리스트의 각 줄마다 들어갈 내용으로, 이 Item을 모아놓은 Array가 필요하다.Array는 배열일 수도 있고, List, ArrayList일 수도 있다.(만드는 사람 마음)
내용의 추가삭제가 용의하게 ArrayList를 이용하는 것이 편하다.
Adapter는 ArrayAdapter<Item>을 extend해서 만든다. 생성자 및 몇 가지 메소드를 override하면 되는데 getCount(), getItem(), getView()정도 면 된다. 여기서 중요한 건 getView인데, 여기서 각 row의 내용을 생성하게 된다.
ListView객체는 생성한 후 setAdapter메소드로 adapter를 연결하면 된다.
getView 메소드를 살펴보면
1 @Override 2 public View getView(int position, View convertView, ViewGroup parent) { 3 View v = convertView; 4 if (v == null){ 5 v = mInflater.inflate(R.layout.item_layout, null); 6 } 7 8 Item item = Item.get(position); 9 if (item != null){ 10 ... item_layout의 내용을 생성... 11 } 12 return v; 13 }
convertView값이 null이면 LayoutInflater를 사용해서 item의 내용이 들어갈 layout을 inflate하고, 내용이 있으면 예전에 getView()메소드로 생성했던 view이므로 재사용한다.
ArrayList에서 position에 해당되는 행을 찾아서 그 내용을 item_layout에 지정한다.ArrayList는 미리 생성자에서 지정해둔다.
마지막으로 작업한 view를 return한다.
Gallery의 경우도 비슷하다. 다만 Item이 ImageView로 정해져 있고, Adapter는 BaseAdapter를 extends해서 만든다.
1 public View getView(final int position, View convertView, ViewGroup parent) { 2 ImageView iv = new ImageView(mContext); 3 iv.setImageBitmap(bitmap); 4 iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 5 iv.setLayoutParams(new Gallery.LayoutParams(width, height)); 6 return iv; 7 }
Gallery는 ImageView를 생성해서 적절하게 처리하면 된다.
ListView나 Gallery의 adapter내용을 변경하려면 해당 뷰의 adapter를 getAdapter()메소드로 받아서 처리 한 후 다시 setAdatper()메소드로 지정해 준다.
1 Adapter adapter = listview.getAdapter(); 2 ... 3 listview.setAdatper(adapter);
Intent로 다른 Activity를 호출할 때 extra data를 넣어서 호출하는 경우가 있다. 예를 들어 B, C 액티비티가 A액티비티를 각각 호출할 때, B는 extra data를 넣어서 호출한다고 하면, A에서는 어떤 액티비티가 호출했는지 구분하기 위해 extra data를 분석할 것이다.
그런데, 만일 B –> A –> C –> A순으로 호출되는 경우를 생각해보면, A에서 B가 호출했다는 것을 알 수 있지만, 이후 A->C->A순으로 호출되면 엉뚱하게도 C에서 호출한 것이 아니라 B에서 호출한 것으로 나온다.
이것은 B에서 A에 전달한 extra data가 이후 호출과정에서도 계속 남아 있기 때문에 A에서 분석할 때 착각하는 것이다.
해결책은 호출한 액티비티를 구분할 용으로 사용한 데이터는 사용 후 바로 삭제하면 된다.
SQLite를 사용할 때에 query(), rawQuery(), execSQL()메소드가 있는데,
반드시 SELECT문을 사용할 때는 query, rawQuery 메소드를
그 외에 INSERT, DELETE, UPDATE등을 사용할 때는 execSQL 메소드를 사용한다.
비슷하다고 거꾸로 하면 결과가 제대로 나오지 않는다.
execSQL메소드는 리턴 값이 없기 때문에 쿼리용으로 쓸 수 없고, query, rawQuery는 쿼리용도로만 쓴다.
그리고 반드시 SQL문의 끝에 ;(세미콜론)이 붙어 있는지 확인한다. 잘 만들어 놓고 세미콜론 하나 때문에 안 돌아가는 경우가 꽤 있었다.
사용한 Cursor와 db객체는 사용이 끝나면 반드시 닫는다. 오류가 발생하지는 않지만 logcat에 오류메시지가 올라온다.
'학교 > 졸업작품' 카테고리의 다른 글
다른 액티비티로 메시지 전송 (2) (0) | 2011.08.23 |
---|---|
서버 클라이언트 통신시 데이터 전달 및 기타... (0) | 2011.08.22 |
액티비티 관련 내용(데이터 전송, 전환 등) (0) | 2011.08.22 |
날씨 업데이트 과정 (0) | 2011.08.22 |
C2DM Push 사용하기 (0) | 2011.08.19 |
- Total
- Today
- Yesterday
- 5 sec rule
- IT·컴퓨터
- setfsb
- lockscreen
- 문학·책
- 프로포즈 데이
- apktool
- 요리·레시피
- GutsyGibbon
- Ubuntu7.10
- 5초 룰
- 락스크린
- U123
- 안드로이드
- 아일랜드
- ubuntu
- 전화번호
- Gutsy
- 잠금화면
- Android
- dex2jar
- 더블린
- NEXUS S
- Leap Year
- STOP_APP_SWITCH
- 하이픈
- 레터스 투 줄리엣
- 일상·생각
- 2월 29일
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |