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

ExpandableList getView시 이미지가 지맘대로 읽힙니다. ㅠㅠ

0 추천
@Override
  public View getChildView(int groupPosition, int childPosition,
    boolean isLastChild, View convertView, ViewGroup parent) {
   View v = convertView;
  
         if(v == null){
             v = inflater.inflate(R.layout.list_expandable_contents, null);
             v.setTag(R.id.list_expandable_contents_img, v.findViewById(R.id.list_expandable_contents_img));
             v.setTag(R.id.list_expandable_contents_title, v.findViewById(R.id.list_expandable_contents_title));
             v.setTag(R.id.list_expandable_contents_singer, v.findViewById(R.id.list_expandable_contents_singer));
         }
        
         Log.e("------------","groupPosition : "+ groupPosition +" / childPosition : "+ childPosition);
         
         SongInfoBean childInfo = getChild(groupPosition, childPosition);
         
         if(childInfo.getTitle() != null){
          ImageView childImg = new ImageView(context);
          childImg = (ImageView)v.getTag(R.id.list_expandable_contents_img);
          setImg(childImg,childInfo.getImg());
          
        /*  int resourceId = context.getResources().getIdentifier("s_"+(childPosition+1), "drawable", context.getPackageName());
          childImg.setImageResource(resourceId);*/
          
          TextView childTitle = (TextView)v.getTag(R.id.list_expandable_contents_title);
          childTitle.setText(childInfo.getTitle());
          
          TextView childSinger = (TextView)v.getTag(R.id.list_expandable_contents_singer);
          childSinger.setText(childInfo.getSinger());
         }else{
          ImageView childImg = (ImageView)v.getTag(R.id.list_expandable_contents_img);
          childImg.setImageResource(R.drawable.ic_launcher);
          
         }
         
   return v;
  }



private void setImg(ImageView view, String imgUrl){
  if(imgUrl != null){
   /*ImageMemory imageMemory = ImageMemory.getInstance();
   Bitmap bmImg = imageMemory.getBitImage(imgUrl);*/
   Bitmap bmImg = null;
   if(bmImg == null){
    ImgViewTask task = new ImgViewTask(view);
          task.execute(imgUrl);
          //imageMemory.setImageMemoryList(imgUrl, bmImg);
   }
   /*else{
    WeakReference<ImageView> weakView = new WeakReference<ImageView>(view);
    final ImageView imageView = weakView.get();
    if (imageView != null ) {
                  imageView.setImageBitmap(bmImg);
          }
   }*/
  }
 }
 
 
 class ImgViewTask extends AsyncTask<String, Void, Bitmap> {
     private final WeakReference<ImageView> imageViewReference;

     public ImgViewTask(ImageView imageView) {
         // Use a WeakReference to ensure the ImageView can be garbage collected
         imageViewReference = new WeakReference<ImageView>(imageView);
     }
     
     @Override
  protected Bitmap doInBackground(String... params) {
   
   Bitmap bmImg = null;
   String imgUrl = params[0];
   HttpURLConnection conn= null;
   InputStream is= null;
   
   try {
    URL myFileUrl= new URL(imgUrl);
    conn= (HttpURLConnection)myFileUrl.openConnection();
    conn.setDoInput(true);
    conn.connect();
    is = conn.getInputStream();
    bmImg = BitmapFactory.decodeStream(is);
    is.close();
   } catch (Exception e) {
    e.printStackTrace();
   }finally{
    if(conn != null){
     conn.disconnect();
    }
     
   }
   
   return bmImg;
  }

     
     // Once complete, see if ImageView is still around and set bitmap.
     @Override
     protected void onPostExecute(Bitmap bitmap) {
      
         if (imageViewReference != null && bitmap != null) {
             final ImageView imageView = imageViewReference.get();
             if (imageView != null) {
                 imageView.setImageBitmap(bitmap);
             }
         }
     }
  
 }

안녕하세요.. 리스트 뷰 관련 질문입니다..

 

ExpandalbeList사용하여 childview구성하구요

childView에는 imageview 1개 textview2개가 있습니다.

 

imageview에서 ansyncTask 사용하여, 서버에서 이미지 가져와서 bitmap으로 변환하고  WeakReference<imageView>사용해서  만들어봤는데요

 

문제는 이미지는 잘 받아 오는데 이미지가 childview간에서 지맘대로 붙습니다..

음..말로는 설명이 에메한데요..

 

childview1 - imageview1

childview2 -imageview2

childview3 - imageview3

이 있을때 imageview1에 통신으로 받아온 1-> 2-> 3 -> 1 이미지가 빠르게 바뀌며 올라가는 식입니다.

그리고 나서 imageview 2에 2번 이미지, imageview 3에 1 ->3 .. 이런식입니다.

 

대충 비슷한 패턴이구요.. 이미지가 빠르게 변화되는건 눈에 보일정도 수준이구요..

다른 groupview를 클릭하면 기존 1,2,3번 이미지가 들어가 있는 상태로 열리면서 위에서처럼 4,5,6번 이미지가 왔다갔다 합니다.;;

 

getview햇던 위치를 정상적으로 못찾아 가는거 같은데요.. ㅠㅠ 예전에 잡았던 오류인데  기억이 안나네요 ㅠㅠ

엇.. 자바를 넣었더니 위로가네요; 위에 코드는 child getview 부분이랑 async쪽 코드 입니다..

 

혹시 이문제 아시는분 있으신가요? ㅠㅠ

 

 

 

fhkrwogk (120 포인트) 님이 2014년 11월 14일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...