2012-11-11 1 views
2

나는 벽지 응용 프로그램을 개발하려고합니다. 응용 프로그램이 시작되면 activity는 gridView의 범주 (textView의 이미지 및 해당 이름)를 표시합니다. 카테고리를 선택하면 하위 카테고리로 이동합니다. 하위 카테고리 활동에서는 textVew에 해당 이름이있는 하위 카테고리 이미지도 표시됩니다. 문제가 하위 카테고리 활동 이미지에로드되지 않습니다. 때로는 이미지를로드합니다. 다시 버튼을 누른 다음 해당 하위 카테고리를 다시 선택하면 세 가지 모드 이미지가로드됩니다. 뒤로 버튼을 누르고 하위 카테고리보다 선택하면 다른 세 개의 이미지 (현재 총 10 개의 이미지)가로드됩니다. 이미지가 디스크에 올바르게 캐시됩니다.Android-Universal-Image-Loader :: GridView에 이미지로드

@Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      final View rowView; 
      final ViewHolder viewHolder = new ViewHolder(); 
      if (convertView == null) { 
       rowView = getLayoutInflater().inflate(
         R.layout.item_sub_category_grid, null); 

       viewHolder.imageView = (ImageView) rowView 
         .findViewById(R.id.image_item_sub_category); 
       viewHolder.textView = (TextView) rowView 
         .findViewById(R.id.text_item_sub_cat_desc); 

       rowView.setTag(viewHolder); 

      } else { 
       rowView = (View) convertView; 
      } 

      ViewHolder holder = (ViewHolder) rowView.getTag(); 
      holder.textView.setText(wpSubCategories.get(position) 
        .getSubCategoryName()); 

      imageLoader.displayImage(imageUrls[position], viewHolder.imageView, 
        options, new SimpleImageLoadingListener() { 
       @Override 
       public void onLoadingStarted() { 
        showLoading(); 
       } 
         @Override 
         public void onLoadingComplete(Bitmap loadedImage) { 
          Animation anim = AnimationUtils.loadAnimation(
            SubCategoryGridActivity.this, 
            R.anim.fade_in); 
          viewHolder.imageView.setAnimation(anim); 
          anim.start(); 
         } 
        }); 

      return rowView; 
     } 
    } 

내 그리드 레이아웃 : sub_category_grid.xml :

여기
cacheDir = new File(Environment.getExternalStorageDirectory(), 
        "peakwallpapers/cache"); // -- 
      // Create configuration for ImageLoader 
      config = new ImageLoaderConfiguration.Builder(this).enableLogging() 
        .discCache(new UnlimitedDiscCache(cacheDir)) 
        .memoryCache(new UsingFreqLimitedMemoryCache(2000000)) 
        .denyCacheImageMultipleSizesInMemory().threadPoolSize(10) 
        .threadPriority(Thread.MIN_PRIORITY + 2) 
        .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) 
        .build(); // -- 

      options = new DisplayImageOptions.Builder() 
        .showStubImage(R.drawable.stub_image) 
        .showImageForEmptyUri(R.drawable.image_for_empty_url) 
        .cacheInMemory().cacheOnDisc().build(); 
      imageLoader.init(config); 

가의 getView() methood입니다 :

<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridview_sub_category" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center" 
    android:horizontalSpacing="4dip" 
    android:numColumns="2" 
    android:verticalSpacing="4dip" /> 

그리드의 내 항목 : 여기 내 구성입니다 item_sub_category_grid .xml :

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/frame_l_item_sub_category_item" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight=".5" 
    android:background="@drawable/textlines" > 

    <ImageView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/image_item_sub_category" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:adjustViewBounds="true" 
     android:contentDescription="@string/descr_image" 
     android:scaleType="centerCrop" /> 

    <TextView 
     android:id="@+id/text_item_sub_cat_desc" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom" 
     android:background="@drawable/cat_bg" 
     android:gravity="center_horizontal" 
     android:text="TextView" 
     android:textColorHighlight="#656565" 
     android:typeface="monospace" > 
    </TextView> 

</FrameLayout> 

N.B : LogCat에 오류가 표시되지 않습니다.

답변

4

우선, 스레드 풀 크기가 너무 크다고 생각합니다. 물론 앱이 타겟팅되는 기기에 따라 다릅니다. 그러나 그것은 현대가 아닌 장치에서 정말 느리게 작동합니다. 제 생각에 5면 충분하지만 직접 테스트해야합니다. 최고의 속도와 성능을 얻기 위해 스레드 풀 크기와 스레드 우선 순위를 변경하십시오.

둘째 : 귀하의 getView() 방법에 논리적 실수가 있습니다. final ViewHolder viewHolder = new ViewHolder(); if (convertView == null) { 후에 으로 이동하면 문제가 표시됩니다. vars viewHolderholder은 논리적으로 서로 겹칩니다.

UPD : 활동의 경우 onStop()에서 ImageLoader.stop()을 호출하지 마십시오.

+0

ImageLoader.stop() 호출을 중지했습니다. 작동합니다. – ratulalahy

+0

답변을 추가했습니다. – NOSTRA