0

나는 액티비티 내부에있는 ListView가 있고 그 항목의 각 일부 TextViews DropDownList로 항목과 함께을 사용자 정의이며 이미지 뷰. OnScrollListener() 내에서 구현을 사용하면 listView의 각 항목에 ArrayAdapter를 사용하여 arrayList 및 imageView에서 가져온 값을 텍스트보기에 채우고 .jpeg 파일을 SD 카드에 저장하여 채 웁니다. SD 카드에서의 .jpeg 파일은 비트 맵으로 변환 할 때 문제가 발생 List View ItemListView에서 ImageView를 처리하는 방법은 무엇입니까?

(즉 BitmapFactory.decodeFile (파일 이름)) 다음 이미지보기에 할당됩니다이 setImageBitmap을 사용하여 목록보기 항목의 스크린 샷입니다 다음 (비트 맵 bmp). 이미지 뷰에 비트 맵 이미지를 설정하는 것은 긴 프로세스이므로 스크롤 수신기 구현과 보조를 맞추지 못하고 다른 ListView 행의 ImageView에 위의 행에 할당 된 이미지가 채워집니다. 누구든지이 문제를 해결하기 위해 SD 카드에서 imageView로 이미지를 할당하는 운동을 제안 할 수 있습니까? 그것의 내 listView 항목이 아닌 컨트롤이 너무 많은 내가이 문제에 직면 오전 overLoaded 같습니다. 또한 각 행 내부에 단일 ImageView 항목을 사용하여 시도했지만 동일한 방식으로 동작합니다. 이것을 즉흥적으로하는 당신의 제안은 환영받을 것이며 분명히 큰 도움이 될 것입니다. 이것은 당신에게 hopefull 될 것

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

    View row = convertView; 
    AssetDetailHolder assetDetailholder = null; 

    try { 

     if (row == null) { 

      LayoutInflater inflator = ((Activity) context) 
        .getLayoutInflater(); 
      row = inflator.inflate(layoutResourceID, parent, false); 

      assetDetailholder = new AssetDetailHolder(); 

      assetDetailholder.itemPosition = position; 

      assetDetailholder.txtVwlineCOde = (TextView) row 
        .findViewById(R.id.lineCodeValue_ad); 
      assetDetailholder.txtvwLocation = (TextView) row 
        .findViewById(R.id.locationValue_ad); 
      assetDetailholder.txtvwLocationDetail = (TextView) row 
        .findViewById(R.id.detailLocationValue_ad); 
      assetDetailholder.txtvwInventoryNo = (TextView) row 
        .findViewById(R.id.InventoryNoValue_ad); 
      assetDetailholder.spnrconditionCode = (Spinner) row 
        .findViewById(R.id.spinner_ad); 
      assetDetailholder.txtvwAssetName = (TextView) row 
        .findViewById(R.id.AssetNameValue_ad); 
      assetDetailholder.subNoThumbnail = (ImageView) row 
        .findViewById(R.id.IV_subNoThumbnail); 

      row.setTag(assetDetailholder); 
     } else { 
      assetDetailholder = (AssetDetailHolder) row.getTag(); 
      assetDetailholder.itemPosition = position; 
     } 

     AssetDetail assetDetail = assetsDetailList[position]; 

     new ThumbnailTask(position, assetDetailholder, assetDetail, context) 
       .execute(); 

     if (assetDetail.assetLineCodeDesc.equals("")) { 
      assetDetailholder.txtVwlineCOde 
        .setText(assetDetail.strLineCOde); 
     } else { 
      assetDetailholder.txtVwlineCOde.setText(assetDetail.strLineCOde 
        + "(" + assetDetail.assetLineCodeDesc + ")"); 
     } 

     if (assetDetail.assetLocationNameDesc.equals("")) { 
      assetDetailholder.txtvwLocation 
        .setText(assetDetail.strLocationName); 
     } else { 
      assetDetailholder.txtvwLocation 
        .setText(assetDetail.strLocationName + "(" 
          + assetDetail.assetLocationNameDesc + ")"); 
     } 

     assetDetailholder.txtvwLocationDetail 
       .setText(assetDetail.strLocationDetail); 

     if (assetDetail.strInventoryNumber.contains("-")) { 
      assetDetailholder.txtvwInventoryNo 
        .setText(assetDetail.strInventoryNumber.split("-")[0]); 
     } else { 
      assetDetailholder.txtvwInventoryNo 
        .setText(assetDetail.strInventoryNumber); 
     } 
     assetDetailholder.txtvwAssetName.setText(assetDetail.assetName); 

     String conditionCodeString = assetDetail.assetConditionCode; 

     if (conditionCodeString != "" || conditionCodeString != null) { 
      try { 
       int conditionCodeInteger = Integer 
         .parseInt(conditionCodeString); 
       assetDetailholder.spnrconditionCode 
         .setSelection(conditionCodeInteger); 
      } catch (Exception e) { 
       assetDetailholder.spnrconditionCode.setSelection(0); 
      } 
     } else { 
      assetDetailholder.spnrconditionCode.setSelection(0); 
     } 

     // String thumbnailDir = Common 
     // .getSubNoDirectory(context, assetDetail); 

     // if (new File(thumbnailDir).isDirectory()) { 
     // 
     // File thumbnailFile = new File(Common.getSubNoImgFilePath(
     // thumbnailDir, assetDetail, SubNo_ImageSample.A)); 
     // 
     // if (thumbnailFile.exists()) { 
     // assetDetailholder.subNoThumbnail 
     // .setImageBitmap(BitmapFactory 
     // .decodeFile(thumbnailFile.getAbsolutePath())); 
     // } 
     // } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return row; 
} 

static class AssetDetailHolder { 
    TextView txtVwlineCOde; 
    TextView txtvwLocation; 
    TextView txtvwLocationDetail; 
    TextView txtvwInventoryNo; 
    TextView txtvwAssetName; 
    Spinner spnrconditionCode; 
    ImageView subNoThumbnail; 
    public int itemPosition; 
} 

private static class ThumbnailTask extends AsyncTask<Void, Void, Void> { 

    private int mPosition; 
    private AssetDetailHolder mHolder; 
    private Context cntxt; 
    private AssetDetail assetItem; 

    private Bitmap thumbnailBmp; 

    public ThumbnailTask(int position, AssetDetailHolder holder, 
      AssetDetail asset, Context context) { 
     mPosition = position; 
     mHolder = holder; 
     assetItem = asset; 
     cntxt = context; 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 

     String thumbnailDir = Common.getSubNoDirectory(cntxt, assetItem); 

     if (new File(thumbnailDir).isDirectory()) { 

      File thumbnailFile = new File(Common.getSubNoImgFilePath(
        thumbnailDir, assetItem, SubNo_ImageSample.A)); 

      if (thumbnailFile.exists()) { 

       thumbnailBmp = BitmapFactory.decodeFile(thumbnailFile 
         .getAbsolutePath()); 
      } 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     if (mHolder.itemPosition == mPosition && thumbnailBmp != null) { 
      mHolder.subNoThumbnail.setImageBitmap(thumbnailBmp); 
     } 
     // super.onPostExecute(result); 
    } 
} 
+0

왜 onScrollListener를? – njzk2

+0

로딩에 asynctask가 필요합니다. – njzk2

+0

나는이 문제로 오래 동안 고심했다. 마지막으로 (비트 맵을 반환 한) 메서드를 "동기화"하여이를 수행했습니다. –

답변

1
+0

제안한 콘텐츠는 유익했지만 많은 도움이되었습니다. 이미지 - 비트 맵 변환을위한 비동기 클래스를 구현 한 후에도 이전에했던 것과 동일한 문제를 일으키는 onScrollListener가 발생합니다. 이미지는 무작위 행의 ImageView에 매핑됩니다. –

관련 문제