2

我正在尝试开发墙纸应用程序。当应用程序启动时,活动会在 gridView 上显示类别(文本视图上的图像和相应名称)。当我选择一个类别时,它会导航到一个子类别。在子类别活动中,它还在 textVew 上显示具有相应名称的子类别图像。问题在于子类别活动图像未加载。有时它会加载图像;当我按下后退按钮,然后再次选择该子类别时,它会加载三种模式图像;按下后退按钮并选择子类别会导致加载另外三个图像(现在总共 10 个图像)。图像已正确缓存在磁盘上。这是我的配置:

   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() 方法:

   @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 :

<?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>

注意:它在 LogCat 上没有显示错误。

4

1 回答 1

4

首先,我认为您的线程池大小太大。当然,这取决于您的应用所针对的设备。但它在非现代设备上运行速度会非常慢。我认为5就足够了,但是您应该自己测试一下。改变线程池大小和线程优先级以实现最佳速度和性能。

第二:你的getView()方法有逻辑错误。继续前进 final ViewHolder viewHolder = new ViewHolder();if (convertView == null) { 您会发现问题所在。您的 varsviewHolderholder逻辑上相互重叠。

UPD:onStop()如果您这样做,请不要在活动中调用 ImageLoader.stop() 。

于 2012-11-11T08:39:46.967 回答