본문 바로가기

자료

이미지 URL을 ListView에 뿌리고 스크롤시 버벅 거림 해결~~!!

뭐든지 그렇지만 해보고 나니 별거 없더라는...

역시 진리는..ApiDemos 에 있었음..

com.example.android.apis.view.List13.java를 참고

샘플은 Views/Lists/13.slow Adapter

덧붙여 스크롤을 맨 마지막으로 이동시 다음 리스트를 가져와서 갱신하는 것도 해결~!

원본은...
    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("1"+mStrings[first + i]);
                    t.setTag(null);
                }
            }
           
            mStatus.setText("Idle");
            break;
        case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
            mBusy = true;
            mStatus.setText("Touch scroll");
            break;
        case OnScrollListener.SCROLL_STATE_FLING:
            mBusy = true;
            mStatus.setText("Fling");
            break;
        }
    }

수정본은...(Json 파싱 일경우)
  listGoods.setOnScrollListener(new OnScrollListener() {
   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++) {
          try {
           View v = view.getChildAt(i); //우선 리스트에서 하나를 가져온다
           imageGift = (ImageView)v.findViewById(R.id.imageGift);
// 그 하나는 커스텀 레이아웃 이기에... 그 안에서 view를 찾는다.
                        JSONObject order = getGoodsList.getJSONObject(first+i);
                        //값 설정
                        String imgPath = CommonVar.IMG_URL+order.getString("goods_id")+".png";
                        imageURL = new URL(imgPath);
                        Drawable d = Drawable.createFromStream(new URL(imgPath).openConnection().getInputStream(), "src");
                        imageGift.setImageDrawable(d);
          } catch (JSONException e) {
           e.printStackTrace();
          } catch (MalformedURLException e) {
           e.printStackTrace();
          } catch (Exception e) {
           e.printStackTrace();
          }
                  }
                  break;
              case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
                  mBusy = true;
                  break;
              case OnScrollListener.SCROLL_STATE_FLING:
                  mBusy = true;
                  break;
              }
    
   }

//스크롤시 이벤트 받기
   public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {
   //스크롤을 맨 마지막 까지 했을경우 (다음 페이지 가져오기)
    if ((firstVisibleItem + visibleItemCount) == (totalItemCount)) {
     page++;
     JSONArray getArr =getMyList(page);
     if(getArr != null){
      for(int i = 0; i < getArr.length(); i++){
       try {
        getGoodsList.put(getArr.getJSONObject(i));
       } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
      }
      //리스트 갱신
      Adapter.notifyDataSetChanged();
     }
    }
   }
  });

'자료' 카테고리의 다른 글

Android에서 NDK + JNI + FFmpeg 사용  (4) 2012.03.27
동적으로 객채 생성후 각각에 이벤트 주기~!  (0) 2012.03.26
Intent 활용 예시  (2) 2012.02.07
갤러리 공유 기능 추가하기  (0) 2012.02.06
C2DM 발송 테스트 소스  (0) 2012.02.02