본문 바로가기

구글과인터넷/안드로이드

안드로이드 ListView 리스트 특정위치 이동하기

   int _curPos = 0; // 아이템 위치를 글로벌 변수로 저장

        m_glist.setOnScrollListener( new OnScrollListener() {

            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
                // TODO Auto-generated method stub
                Log.d("scroll_item", "cnt_item"+firstVisibleItem); //현제스크롤된아이템 리스트 카운터를 알수있다.
                _curPos = firstVisibleItem;
            }

            public void onScrollStateChanged(AbsListView view, int scrollState) {
                // TODO Auto-generated method stub
                
                switch (scrollState) {
                case OnScrollListener.SCROLL_STATE_IDLE :                // 스크롤이 정지되어 있는 상태야.정지되어 있는 상태일 때 해야 할 일들을 써줘.
                
                    break;
                case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL :  //  스크롤이 터치되어 있을 때 상태고, 스크롤이 터치되어 있는 상태일 때 해야 할 일들을 써줘.
              
                    break;
                case OnScrollListener.SCROLL_STATE_FLING :           // 이건 스크롤이 움직이고 있을때 상태야.   여기도 마찬가지.
                 
                    break;
              }
                
            }
            }
            );

임의함수()
{
   //_list 임의 함수 리스트라 정한다.
    _list.setSelectionFromTop(curPos , 0); //스롤을 저장해두었던 curPos 위치로 이동한다.

}


////////////////////////////////////////////////////////////////////////////////////////

출처: http://www.androidpub.com/247014

안녕하세요.  안드로이드를 공부하는 사람인데요.

ListView 스크롤링에 대해서 궁금한게 있어서 이렇게 문의드립니다.
제가 만든 프로그램을 간략히 말씀드리자면은...

리스트에 대략 20개의 항목이 있고, 1개 항목(Row)는 Textview로 노래제목이 있고, 바로 오른쪽에는 CheckBox가 위치해 있습니다.
여러개의 항목들을 CheckBox로 체크후 리스트와 별도로 그아래 "OK"버튼이 위치해 있어서...
누르면 Check된 항목에 없었던 프로그래스바가 생기면서, 체크한 항목의 순서대로 0~100%까지 프로그래스 이동을 하고 끝나면, 
다음 항목으로 프로그래스바가 동일하게 진행되어서 마지막 체크한 항목까지 다 진행 후 끝나도록 하는 프로그램인데요.

문 제는 현재 단말의 화면에서는 리스트의 항목이 최대4개까지만 보이게 되어있는데, 4개 이후의 5,6번째의 프로그래스바(현재 화면에 아직 안보이는 항목)을 체크 하였을때에 , 그 곳에 프로그래스바가 보이게 하기 위해서는 리스트의 스크롤을 자동으로 위로 올린다거나 (혹은 다음에 프로그래스바가 진행할 부분으로 리스트 스크롤을 이동 시켜야 함) 해야 할 것 같은데요.

어떻게 해야 할지 잘 모르겠습니다..

제가 구현한 사항은 ListActivity를 상속받았고, adapter는 BaseAdapter를 상속받아서 구현하였습니다.

리스트의 특정 부분으로 위치 할 수 있도록 스크롤링 하는 방법 좀 알려주시면 감사하겠습니다.

꾸벅@~

즐거운 한주 되시구요.
끝까지 읽어주셔서 감사합니다. ^^

댓글
2010.04.06 14:40:47
id: 치요맘치요맘
profile
scrollTo() 이용하시면 될 듯..
댓글
2010.04.06 14:42:00
세가맨
scrollTo() 를 이용하면은, 받는 것은 어떤 것인가요? 예를 들어 Onscroll() 가 호출되도록 해야 하는 건가요?
댓글
2010.04.06 14:52:39
id: 치요맘치요맘
profile

스크롤 리스너를 쓰고 싶으시면 setOnScrollListener 를 이용하시면 될 것이고
강제로 리스트의 특정 부분으로 위치 할 수 있도록 스크롤링  하시고 싶으시다면
뷰 에서 제공하는 scrollTo(int x, int y)  메소드를 이용하시라는 뜻 입니다.

댓글
2010.04.06 16:00:08
세가맨

해결했네요....  scrollTo()를 사용하면은 기존 리스트 값에 첫 부분이  바뀌므로.. 사용자가 터치후 스크롤 올리거나 내릴때 별도의 
계산을 해주어야 하는 점이 있어서... 좀더 찾아보니...   setSelectionFromTop()가 안성 맞춤이네요...
답변 주셔서 감사합니다.


///////////////////////////////////////////////////////

출처: http://peretanguy.tistory.com/16

lstItems = (ListView)findViewById(R.id.lstLocation);
  
ItemAdapter adapter = new ItemAdapter(this, R.layout.item_row); // 어댑터를 생성합니다. 
lstItems.setAdapter(adapter);
  
lstItems.setOnItemClickListener(new OnItemClickListener() {
   public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
      lstItems.setSelectionFromTop(position, 0);
   }
});

리스트 뷰에서 특정 아이템이 선택되었을 때 setSelectionFromTop(int position, int y) 을 
통하여 해당 아이템을 특정 위치로 스크롤 시킨다.

////////////////////////////////////////////////////////////////////////

출처: http://codingworshipper.tistory.com/tag/%5B%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C%5D%20%EC%8A%A4%ED%81%AC%EB%A1%A4%20Scroll%20%EA%B0%92%EC%9C%BC%EB%A1%9C%20%EC%9D%B4%EB%B2%A4%ED%8A%B8%ED%95%98%EA%B8%B0

 g = (GridView)findViewById(R.id.GridView01);
        
        g.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
/*switch (scrollState) {
     case OnScrollListener.SCROLL_STATE_IDLE :                // 스크롤이 정지되어 있는 상태야.
      정지되어 있는 상태일 때 해야 할 일들을 써줘.
      break;
     case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL :  //  스크롤이 터치되어 있을 때 상태고,
      스크롤이 터치되어 있는 상태일 때 해야 할 일들을 써줘.
      break;
     case OnScrollListener.SCROLL_STATE_FLING :           // 이건 스크롤이 움직이고 있을때 상태야. 
      여기도 마찬가지.
      break;
   }*/
Log.d("test",Integer.toString(scrollState));
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
Log.d("test", Integer.toString(firstVisibleItem)+":"+
Integer.toString(visibleItemCount)+":"+
Integer.toString(totalItemCount)+":");
if ((firstVisibleItem + visibleItemCount) == totalItemCount && temp==1) {
            loadMoreButton.setVisibility(View.VISIBLE);
        }else{
         loadMoreButton.setVisibility(View.GONE);
        }
        
}
});