마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

listivew 갱신질문...

0 추천
안녕하세요 안드로이드 초보 개발자입니다..

listview를 갱신하려고 하는데요..

listview에 이미지가 들어가는데요..

그 이미지를 서버에서 가져와서 뿌려주는 방식입니다.

보통 커스텀 리스트뷰들을 보게되면 10개정도 뿌려주고 더보기나 다시 로딩하여 뿌려게 하도록 구현하던데요

그것을보고 제가 구현을 하긴햇는데 아무래도 이건 아닌것 같아 질문올려봅니다.

제가 구현한 방식은 adapter에 몇개를 뿌려줄 건지 설정해주는 부분 즉

@Override
 public int getCount() {
  // TODO Auto-generated method stub
  return count;
 }

이 부분인데요 만약에 3개씩 뿌려주려고 listview를 커스텀하게되면..

제가 한방식은..

activity에서 이미지 3개의 bitmap을 다 가져온후 adapter를 처음에 셋팅해주고

더 보기나 다음 3개의 이미지를 보겟다는 이벤트가 발생하면 새로운 이미지 3개의 이미지 bitmap을 가져온후 (그럼 지금 현재 나타낼 이미지 bitmap은 6개입니다)

adapter.notifyDataSetChanged();

해줫는데요 그냥 이렇게 notifyDataSetChanged()만 호출하게되면.. 이미지가 추가되지않아서..

count를.. activity에서 ;;; +3씩 해주는 방식이거든요;;;;;;;;;;;;;;;;;

이렇게 하면 listview를 재사용하지 않아..추후 나중에 메모리 때문에 문제가 되지 않을까요??

그래서 getview에서 이미지를 하나씩 position마다 그때그때 가져오도록 햇엇는데요..

그렇게 하니.. 여러게가 됫을경우.. 첫번째 이미지와 마지막 이미지가 제자리를 찾지 못하고 한참 다른 이미지로

바뀌다가 제자리를 찾는 현상이 발생하엿습니다.. 그래서 액티비티에서 이미지 로딩 하는 방법을 선택했는데요..

제가 하는 방식이 추후 데이터가 많아질경우 메모리릭이 날수 있을것 같아 고수님들께 한번 물어봅니다..

다른 방법이 있거나.. 아시는 것이 있으면 ㅠㅠ 힌트 하나 투척해주십시오 ㅠㅠ

부탁드리겠습니다..
mamongs (4,050 포인트) 님이 2013년 7월 19일 질문

1개의 답변

0 추천
이미지는 getview에서 로드 하시는게 맞습니다.

아마 아이템 뷰를 재사용하게 작성을 하셨을 텐데....

이미지가 위치를 못찾는 이유는 뷰를 정의하는 부분에 이미지를 로드 하셨기 땨문 일겁니다.

이미지 로드가 모두 끝난후 데이터를 넣는 다는 생각 을 해보세요~~!
ThisPlus (46,920 포인트) 님이 2013년 7월 19일 답변
@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        try{
            if (convertView == null)  {
                convertView = View.inflate(mcon, mlayoutId, null);
               
                if(mlayoutId == R.layout.popuplist_item){
                   
                }else if(mlayoutId == R.layout.itemlistivew_item){
                   
                }
            }
            if(null != convertView){
               
                if(mlayoutId == R.layout.popuplist_item){
                    TextView popuplistviewtext = (TextView)convertView.findViewById(R.id.popuplistviewtext);
                    popuplistviewtext.setText(mdataarray.getString(position));
                   
                }else if(mlayoutId == R.layout.itemlistivew_item){
                    ImageView myproduct_imgtitle = (ImageView)convertView.findViewById(R.id.myproduct_imgtitle);
                    /*
                    JSONObject dataob;
                    StringBuffer strbuf = new StringBuffer();
                   
                    for(int i=0; i < mdataarray.length(); i++){
                        dataob = mdataarray.getJSONObject(i);
                        strbuf.append(dataob.get("promainimg").toString());
                    }
                    new DownLoadimage(myproduct_imgtitle).execute(strbuf.toString());
                    */
//                    myproduct_imgtitle.setImageBitmap(mbitmap.get(position));
                }
            }
        }catch (Exception e) {
            // TODO: handle exception
            Log.d("ErrorLog", "ListViewAdapter : GetView : " + e.toString());
        }
        return convertView;
    }

null != convertView 이부분에서 이미지 로드를 했는데..
이부분이 아니라 다른데서 해야한다는 말인가요?
네~~!
조건을 잘보시면 왜그런지 아실탠데....
결론을 말씀드리면
return convertView;
바로 위에서 이미지를 로드 하시면 됩니다.
그리고 뷰홀더를 사용하심을 추천 드립니다.
...