제가 만들어놓은 커스텀 아답터가 있습니다.
baseadapter 상속했구 listadapter하고 filterable 구현한 상태입니다
근데 원래는 제가 데이터베이스에서 처음에 한번에 로드하는 방식으로 했는데...
미친짓었네요 ㅋㅋㅋㅋ 데이터 많아지니까 그냥 outofmemory떠요..
문제는 그걸 lasy화 하려는데... 생각해보니까 이넘은 한 테이블에서만 정보를 로드해오는게 아니고...
7개 테이블에서 읽어와서 하나는 1개는 프레임 레이아웃으로 보여주고 6개는 1개와 5개로 나뉘어서
각자 lazy리스트뷰에 보여줘야합니다... 1개짜리는 일단 간단하게 해결했고... 프레임 레이아웃인넘도 해결했습니다...
테이블 5개짜리는 어떻게... 해야 하죠??? 참고로 5개짜리는 같은 인터페이스를 상속한 클래스에요...
아래 소스코드는 제가 알고있는 레이지뷰 구현방식입니다...
public class DataLoader {
private final HashMap<Integer, Data> list;
public DataLoader() {
list = new HashMap<Integer, Data>();
}
public void loadDataFromThread(final Integer pos, final View v) {
if (list.containsKey(pos)) {
v.setTag(list.get(pos));// 데이터 존재시 여기서 컷
return;
}
final Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(final Message msg) {
v.setTag(msg.what);// 실제론 뷰에 그리는작업이라 핸들러 생성
return true;
}
});
new Thread(new Runnable() {
@Override
public void run() {
final Data data = loadData(pos);
list.put(pos, data);
handler.handleMessage(handler.obtainMessage(0, data));
}
}).start();
}
private Data loadData(final Integer pos) {
if (list.containsKey(pos)) {
return list.get(pos);
}
// 데이타 로드
return new Data();// 예시를 위한 임시 생성자입니다...
}
}