현재 애니메이션 및 주소록과 관련된 예제를 구현하고 있는 중입니다.
// Handler handler;
// Runnable runnable;
Uri people = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String projection[] = new String[]{
ContactsContract.CommonDataKinds.Phone._ID,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
.
.
.
.
및 Cursor 와 Query를 이용해서 주소록을 불러왔구요 do ~ while()문, Cursor.MoveTo~를 통하여 모든 주소록을 탐색하도록 했습니다. (이것을 그대로 onCreate()에서 사용하면 이미지와 이름, 전화번호를 불러옵니다)
레이아웃은 ListView및 Adapter로 구현하지 않았고 단순히 ImageView와 TextView를 사용해서 한개만 보여주도록 했습니다. (translate 애니메이션을 구현해야 하기에 리스트뷰를 사용하지 않았습니다.)
여기서 탐색하는 시간에 지연시간을 두어 주소록의 정보가 바뀌도록 스레드와 핸들러를 통해 UI를 업데이트 해주려고 합니다만... 스레드구현 방법에 문제가 있는 것같습니다.
public class 클래스이름 implements Runnable(){} 클래스 안에서 run()메소드에 위의 코드를 그대로 사용했는데... 한마디로 주소록 소스를 붙여넣기 했습니다.
public class Runnabler implements Runnable {
@Override
public void run() {
do{
Uri people = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String projection[] = new String[]{
ContactsContract.CommonDataKinds.Phone._ID,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
.
.
.
} while(Cursor.moveToNext());
이렇게하고 시작하면 바로 보이도록 onStart() 메소드에서 handler.post(runnable)로 메세지를 전달해주고 스레드를 .start()해주니... 반응이 없네요.
주소록 소스에는 문제가 없는걸 보면 역시 스레드를 구현하는 방법이 잘못된 것이라 생각되는데... 그렇다면 에러라도 나면 좋겠습니다만 에러도 없고 실행은 잘됩니다. 스레드 시작이 되지 않아 UI 업데이트가 되지 않을뿐이네요...
무식하게 run()메소드 안에 넣은 것이 문제일까요? 아니면 잘못된점을 지적해주시면 감사하겠습니다.