안녕하세요 .. 구글링 이틀동안 해보다가 답이 안나와서 염치불구하고 ㅠㅠ..
리스트뷰에 어떤 버튼을 누르면 자동으로 스크롤하게끔 하고 싶어서요.
제가 지금 한 방법은
[1]
버튼을 누른다-> 스레드 실행 ->핸들러에 listview.scrollTo() 메소드 넣어서 그걸로 내림
이렇게 했는데요.
이렇게 하니까 부드럽게 화면이 내려가는 것 까지는 좋은데
listview가 새로운 뷰를 만들어 내지 않았습니다. (밑쪽이 텅 비어버립니다.)
로그를 찍어보니 getView 메소드가 실행이 되지 않았습니다 ㅠㅠ..
그리고 이렇게 하니 리스트뷰의 onScrollListener에서 listview.getY()를 하니 제대로 받아오지 못하더군요 ;;
다른분께 여쭤보니 어댑터 notifyDatasetChanged()를 제때제때 불러야 될 것 같다고 하셨는데..
제가 초보라서 어떻게 해야 하는지 감이 안옵니다..ㅜㅜ
핸들러 안에 넣어놓으니 당연히 렉이 걸리고.. 스크롤 할 때마다 갱신하려고 하면 슈퍼 렉(당연한 거지만요 ㅠㅠ)
혹시 제가 잘못한 부분 있는지.. 스레드 쪽 소스 올려봅니다 ㅠㅠ..
테스트 할 때는 텍스트뷰로 해서 몰랐는데 리스트뷰는 ㅠㅠ;
mThread = new Thread(new Runnable() {
public void run() {
try{
while(true) {
if(mThread.isInterrupted()) {
mThread.interrupt();
}
y+=currentspeed;
if(y!=lv.getBottom()){
handler.sendMessage(handler.obtainMessage());
Thread.sleep(40);
}else{
Thread.currentThread().interrupt();
}
}
}catch(InterruptedException e){
mThread.interrupt();
}
}
});
mThread.start();
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
lv.scrollTo(0, y);
};
};
[2]
다음으로 시도해 본 것은 listView.smoothScrollToPosition()이라는 메소드였는데..
int index=listView.getFirstVisiblePosition();
listView.smoothScrollToPosition(index);
는 안되는데
listView.smoothScrollToPosition(10); 은 되구요..
int index=listView.getFirstVisiblePosition();
listView.setSelection(index);
은 되더군요...
이것도 구글링 해 봤는데 결국 못찾았습니다 ㅠㅠ..
[1]이나 [2] 중 하나만 해결된다고 해도 충분한데.. 참 ㅠㅠ
구글링할 때 뭐라고해야할 지 감도 안오네요..