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);
캐싱 라이브러리는 내가 http://stackoverflow.com/questions/15500331/fragmenttabhost-performance-is-slow – Tianmu
에서 그 이유를 찾을 수이 매우 느리게 그 때문에 나는 다른 및 다른 탭을 전환하고 때 하나, onCreateView() 및 onActivityCreated()를 매번 호출합니다. – Tianmu