出使用通用图像装载机内存错误和图像得到刷新图像、装载机、内存、错误

由网友(子屿.)分享简介:我使用的是通用的图像加载器显示但是我得到了内存不足的错误,当我滚动列表比新观点是有第一个视图的图像时的名单并没有在ListView中的图像,缩略图滚动阶段但比图像获取设置为它应该是合适的图像。公共类NewAdapter扩展了BaseAdapter {私人活动的活动;私人的ArrayList<字符串> mov...

我使用的是通用的图像加载器显示但是我得到了内存不足的错误,当我滚动列表比新观点是有第一个视图的图像时的名单并没有在ListView中的图像,缩略图滚动阶段但比图像获取设置为它应该是合适的图像。

 公共类NewAdapter扩展了BaseAdapter {

    私人活动的活动;
    私人的ArrayList<字符串> movieThumbnail;
    私人的ArrayList<字符串> movieText;
    私有静态LayoutInflater吹气= NULL;
    静态文件cacheDir;

    ImageLoaderConfiguration配置=新ImageLoaderConfiguration.Builder(活动)
    .memoryCache(新WeakMemoryCache())
    .denyCacheImageMultipleSizesInMemory()
    .discCache(新UnlimitedDiscCache(cacheDir))
    .threadPoolSize(5)
    .imageDownloader(新URLConnectionImageDownloader(120 * 1000,120 * 1000))
    .enableLogging()
    。建立();

    DisplayImageOptions选项=新DisplayImageOptions.Builder()
    .cacheOnDisc()
    .cacheInMemory()
    .bitmapConfig(Bitmap.Config.RGB_565)
    .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
    。建立();

    私人ImageLoader的ImageLoader的= ImageLoader.getInstance();

    公共NewAdapter(活动一,ArrayList的<字符串> movieThumbnail,ArrayList的<字符串> movieText){
        活性= A;
        / *数据= D; * /
        this.movi​​eThumbnail = movieThumbnail;
        this.movi​​eText = movieText;
        充气=(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        如果(android.os.Environment.getExternalStorageState()。等于(android.os.Environment.MEDIA_MOUNTED))
            cacheDir =新的文件(android.os.Environment.getExternalStorageDirectory(),JunkFolder);
        其他
            cacheDir = activity.getCacheDir();
        如果(!cacheDir.exists())
            cacheDir.mkdirs();

        imageLoader.init(配置);

    }

    公众诠释getCount将(){
        返回movieText.size();
    }

    公共对象的getItem(INT位置){
        返回的位置;
    }

    众长getItemId(INT位置){
        返回的位置;
    }

    公共查看getView(INT位置,查看convertView,ViewGroup中父){
        查看VI = convertView;
        如果(convertView == NULL)
              VI = inflater.inflate(R.layout.listrow,NULL);

        TextView的文字=(TextView的)vi.findViewById(R.id.rowListTextView);
        ImageView的形象=(ImageView的)vi.findViewById(R.id.movi​​eImage);
        text.setText(movieText.get(位置));
        imageLoader.displayImage(movieThumbnail.get(位置),图像,选项);
        返回六;
    }
}
 

和这里是XML格式布局的ImageView和TextView的

 < RelativeLayout的的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:ID =@ + ID / text_relativelayout
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent>

    < ImageView的
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT
        机器人:背景=@可绘制/ latest_list_toggle/>


    < ImageView的
        机器人:ID =@ + ID / movieImage
        机器人:layout_width =40dp
        机器人:layout_height =40dp
        机器人:layout_marginLeft =12dp
        机器人:layout_marginTop =14dp/>

    <的TextView
        机器人:ID =@ + ID / rowListTextView
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_toRightOf =@ + ID / movieImage
        机器人:paddingBottom会=10dp
        机器人:以下属性来=10dp
        机器人:paddingRight =21dp
        机器人:paddingTop =20dp
        机器人:文本=@字符串/ APP_NAME
        机器人:文字颜色=@机器人:彩色/黑白
        机器人:TEXTSIZE =17sp
        机器人:TEXTSTYLE =黑体/>
< / RelativeLayout的>
 

解决方案

设置 .resetViewBeforeLoading()在DisplayImageOptions。

中小型小铲车报价 厂家

I am using the universal image loader to display the images as thumbnail in ListView however i am getting the out of memory error and when i scroll the list than the new view is having the images of first view when the list was not on scroll stage but than the images gets set to proper image which it should be.

public class NewAdapter extends BaseAdapter {

    private Activity activity;
    private ArrayList<String> movieThumbnail;
    private ArrayList<String> movieText;
    private static LayoutInflater inflater=null;
    static File cacheDir;

    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(activity)
    .memoryCache(new WeakMemoryCache())
    .denyCacheImageMultipleSizesInMemory()
    .discCache(new UnlimitedDiscCache(cacheDir))
    .threadPoolSize(5)
    .imageDownloader(new URLConnectionImageDownloader(120 * 1000, 120 * 1000))
    .enableLogging()
    .build();

    DisplayImageOptions options = new DisplayImageOptions.Builder()
    .cacheOnDisc()
    .cacheInMemory()
    .bitmapConfig(Bitmap.Config.RGB_565)
    .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
    .build();

    private ImageLoader imageLoader= ImageLoader.getInstance();

    public NewAdapter(Activity a, ArrayList<String> movieThumbnail, ArrayList<String> movieText) {
        activity = a;
        /*data=d;*/
        this.movieThumbnail = movieThumbnail;
        this.movieText = movieText;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
            cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"JunkFolder");
        else
            cacheDir=activity.getCacheDir();
        if(!cacheDir.exists())
            cacheDir.mkdirs();

        imageLoader.init(config);

    }

    public int getCount() {
        return movieText.size();
    }

    public Object getItem(int position) {
        return position;
    }

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

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null)
              vi = inflater.inflate(R.layout.listrow, null);

        TextView text=(TextView)vi.findViewById(R.id.rowListTextView);
        ImageView image=(ImageView)vi.findViewById(R.id.movieImage);
        text.setText(movieText.get(position));
        imageLoader.displayImage(movieThumbnail.get(position), image, options);
        return vi;
    }
}

and here is Xml Layout for ImageView and TextView

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/text_relativelayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/latest_list_toggle" />


    <ImageView
        android:id="@+id/movieImage"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_marginLeft="12dp"
        android:layout_marginTop="14dp" />

    <TextView
        android:id="@+id/rowListTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/movieImage"
        android:paddingBottom="10dp"
        android:paddingLeft="10dp"
        android:paddingRight="21dp"
        android:paddingTop="20dp"
        android:text="@string/app_name"
        android:textColor="@android:color/black"
        android:textSize="17sp"
        android:textStyle="bold" />
</RelativeLayout>

解决方案

Set .resetViewBeforeLoading() in DisplayImageOptions.

阅读全文

相关推荐

最新文章