2014-12-18 3 views
0

FragmentActivity + FragmentTabHost 레이아웃 ListView를 사용하여 universal-image-loader을 사용하여 사진을 표시했습니다. 하지만 왜 전환 할 때 탭이 매우 느리게 반응하지 않는지 알 수 없습니다. 그래서 저는이 문제에 대한 해결책을 도처에서 찾았습니다.URL에서 유니버설 이미지 로더를로드하는 방법

주요 활동 클래스 :

public class SMMainActivity extends FragmentActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_sm_index); 
     initView(); 
    } 

    private void initView() { 
     layoutInflater = LayoutInflater.from(this); 
     mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); 
     mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); 
     int count = fragmentArray.length; 

     for (int i = 0; i < count; i++) { 
      TabSpec tabSpec = mTabHost.newTabSpec(mTextviewArray[i]) 
        .setIndicator(getTabItemView(i)); 
      mTabHost.addTab(tabSpec, fragmentArray[i], null); 
     } 
    } 

    private View getTabItemView(int index) { 
     View view = layoutInflater.inflate(R.layout.tab_indicator, null); 
     ImageView imageView = (ImageView) view.findViewById(R.id.icon); 
     imageView.setImageResource(mImageViewArray[index]); 
     TextView textView = (TextView) view.findViewById(R.id.title); 
     textView.setText(mTextviewArray[index]); 

     return view; 
    } 

    private FragmentTabHost mTabHost; 
    private Class<?> fragmentArray[] = { SMHomeFragment.class, 
      SMCollectionFragment.class, SMShopCarFragment.class, 
      SMMeFragment.class }; 
    private LayoutInflater layoutInflater; 
    private int mImageViewArray[] = { R.drawable.indexicon3, 
      R.drawable.indexicon4, R.drawable.indexicon2, R.drawable.indexicon }; 
    public static String mTextviewArray[] = { "index", "other", "shopcar", "me" }; 
} 

목록보기 adpter 클래스 :

public class ProductAdpter extends BaseAdapter { 
    public ProductAdpter(Activity activity, List<StoreProduct> products) { 
     this.mActivity = activity; 
     this.products = products; 
     inflater = LayoutInflater.from(activity); 
    } 

    public int getCount() { 
     if(products==null) 
      return 0; 
     return products.size(); 
    } 

    public StoreProduct getItem(int position) { 
     return products.get(position); 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    private class ViewHolder { 
     public ImageView productImageview; 
     public TextView productName; 
     ... ... 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     final StoreProduct data = products.get(position); 
     ViewHolder holder; 
     View vi = convertView; 
     if (convertView == null){ 
      vi = inflater.inflate(R.layout.listview_sm_product, null); 
      holder = new ViewHolder(); 
      holder.productImageview = (ImageView) vi 
        .findViewById(R.id.product_imageview); 
      holder.productName = (TextView) vi.findViewById(R.id.product_name); 
      ... ... 
      vi.setTag(holder); 
     } else { 
      holder = (ViewHolder) vi.getTag(); 
     } 
     ImageLoader.getInstance().displayImage(data.getPicturePath(), holder.productImageview, animateFirstListener); 
     holder.productName.setText(data.getName()); 
     ... ... 
     return vi; 
    } 

    private static class AnimateFirstDisplayListener extends SimpleImageLoadingListener { 
     static final List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>()); 

     @Override 
     public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
      if (loadedImage != null) { 
       ImageView imageView = (ImageView) view; 
       boolean firstDisplay = !displayedImages.contains(imageUri); 
       if (firstDisplay) { 
        FadeInBitmapDisplayer.animate(imageView, 500); 
        displayedImages.add(imageUri); 
       } 
      } 
     } 
    } 


    private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener(); 
    private Activity mActivity; 
    private static LayoutInflater inflater = null; 
    private List<StoreProduct> products; 
} 

하여 ImageLoader 구성 :

DisplayImageOptions options = new DisplayImageOptions.Builder() 
     .showImageOnLoading(R.drawable.ic_stub) 
     .showImageForEmptyUri(R.drawable.ic_empty) 
     .showImageOnFail(R.drawable.ic_error) 
     .cacheInMemory(true) 
     .cacheOnDisk(true) 
     .considerExifParams(true) 
     .build(); 
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context) 
     .threadPriority(Thread.NORM_PRIORITY - 2) 
     .denyCacheImageMultipleSizesInMemory() 
     .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) 
     .diskCacheSize(50 * 1024 * 1024) // 50 Mb 
     .diskCacheFileNameGenerator(new Md5FileNameGenerator()) 
     .imageDownloader(new BaseImageDownloader(context,5 * 1000, 30 * 1000)) 
     .defaultDisplayImageOptions(options) 
     .tasksProcessingOrder(QueueProcessingType.LIFO) 
     //.writeDebugLogs() 
     .build(); 
// Initialize ImageLoader with configuration. 
ImageLoader.getInstance().init(config); 

답변

0

시도 피카소

강력한 이미지 다운로드 안드로이드 http://square.github.io/picasso/

+0

캐싱 라이브러리는 내가 http://stackoverflow.com/questions/15500331/fragmenttabhost-performance-is-slow – Tianmu

+0

에서 그 이유를 찾을 수이 매우 느리게 그 때문에 나는 다른 및 다른 탭을 전환하고 때 하나, onCreateView() 및 onActivityCreated()를 매번 호출합니다. – Tianmu

관련 문제