본문 바로가기

프로그래밍/Android

천천히 로딩되는 리스트 아이템

 

천천히 로딩되는 리스트는 sdk 의 api데모에 포함되어 있다.

스크롤 이벤트에 따라 전역변수를 두어 스크롤이 이동할때는 리스트 아이템을 특정 view가 보이도록 하고,

스크롤 이동이 끝나면 세부 view를 보이도록 한다.

Adapter의 getView 메쏘드를 통해 리턴되는 view를 조절하면 된다.

 

api demos의 소스를 대략 살펴보면 아래와 같다.

이 소스에서는 아이템은 TextView를 사용했으며, tag 정보를 통해 아이템 항목을 다시 설정한다.

(일부 내용을 제거 했으므로 정상 소스는 sdk 샘플에서 확인..)

1. <ListView> 레이아웃을 구성한다.

 

2. 액티비티 ListActivity 구성.

    public class List13 extends ListActivity implements ListView.OnScrollListener

 

3. 리스트 설정

    setListAdapter( new SlowAdapter(this) );

    getListView().setOnScrollListener(this);

 

4. 스크롤 이벤트

    public void onScrollStateChanged(AbsListView view, int scrollState) {

switch(scrollState) {

// 일반적인 상태

case OnScrollListener.SCROLL_STATE_IDLE:

    mBusy = false;

   

   // 화면에 보이는 녀석들만 갱신

   int first = view.getFirstVisiblePosition();

   int count = view.getChildCount();

   for( int i=0;i<count;i++) {

       TextView t = (TextView)view.getChildAt(i);

        if(t.getTag() != null) {

             t.setText("아이템");

             t.setTag(null);

        }

           .

           .

    }

 

               break;

 

  // 터치 입력시

  case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:

   mBusy = true;

   break;

 

  // 플링(드래그?) 했을때...

  case OnScrollListener.SCROLL_STATE_FLING:

   mBusy = true;  

   break;

  } 

         }

 

5. Adapter 구성.

private class SlowAdapter extends BaseAdapter

 

getView() 메쏘드

public View getView(int position, View convertView, ViewGroup parent) {

    TextView text = (TextView)convertView;

     if(!mBusy) {

         text.setText("리스트 아이템");

         text.setTag(null);

      } else {

         text.setText("로딩중");

         text.setTag(this);

      }   

      return text; 

 }

 

 

대강 이런 구성인데, LayoutInflater를 사용해 리스트 아이템의 View를 변경하고, LayoutAnimation 같은 녀석을 곁들이면 보다 다양한 리스트 ui 나타난다.

 

쩝.

'프로그래밍 > Android' 카테고리의 다른 글

Edittext 관련 사항들  (0) 2011.09.18
MediaStore 오디오 재생목록  (0) 2011.09.17
List adapter  (0) 2011.09.15
낙서  (0) 2011.09.07
터치 이벤트 처리순서  (0) 2011.09.01
이미지 클리핑 기초  (0) 2011.08.18
ffmpeg 빌드 #3  (0) 2011.07.07
ffmpeg 빌드 #2 ffmpeg 옵션별 빌드  (0) 2011.07.06
ffmpeg 라이브러리 빌드 #1  (0) 2011.06.30
Drag&drop listview  (0) 2010.10.06