0

在我的应用程序中,我有一个列表视图..每一行都包含一个图像和一个相对布局的文本视图..一切都完成了..但是列表视图的滚动不如原生“联系人列表”那么流畅。我认为问题出在 getview (),y 因为在这种方法中我有一个“HTTP”调用和位图图像加载..有没有办法做到这一点..请帮助我..提前谢谢..

我的 Getview 方法:

public View getView(int position, View convertView, ViewGroup parent) 
    {
        // TODO Auto-generated method stub      
         Bitmap bitmap = DownloadImage(
                 kickerimage[position] );        
//       View listView = convertView;
         ViewHolder holder;
         if (convertView   == null) 
            {
                //this should only ever run if you do not get a view back            
             LayoutInflater  inflater = (LayoutInflater) contxt
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
             convertView  = inflater.inflate(R.layout.homelistrow, null); 

             holder = new ViewHolder();

             holder.image = (ImageView) convertView
                        .findViewById(R.id.icon);
             holder.image.setImageBitmap(bitmap);

             holder.text = (TextView) convertView
                        .findViewById(R.id.name_label);
             holder.text.setText(itemsarray[position]);
            }
    return convertView ;        
    }   

private Bitmap DownloadImage(String URL)
    {        
//      System.out.println("image inside="+URL);
        Bitmap bitmap = null;
        InputStream in = null;        
        try {
            in = OpenHttpConnection(URL);
            bitmap = BitmapFactory.decodeStream(in);
            in.close();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
//        System.out.println("image last");
        return bitmap;                
    }
    private InputStream OpenHttpConnection(String urlString)
            throws IOException
            {
                InputStream in = null;
                int response = -1;

                URL url = new URL(urlString);
                URLConnection conn = url.openConnection();

                if (!(conn instanceof HttpURLConnection))                    
                    throw new IOException("Not an HTTP connection");

                try{
                    HttpURLConnection httpConn = (HttpURLConnection) conn;
                    httpConn.setAllowUserInteraction(false);
                    httpConn.setInstanceFollowRedirects(true);
                    httpConn.setRequestMethod("GET");
                    httpConn.connect();

                    response = httpConn.getResponseCode();                
                    if (response == HttpURLConnection.HTTP_OK) 
                    {
                        in = httpConn.getInputStream();                                
                    }                    
                }
                catch (Exception ex)
                {
                    throw new IOException("Error connecting");            
                }
                return in;    
    }
4

2 回答 2

2

从您的代码中,我看到您正在同一线程中的 getView() 函数中下载图像。用于webImageView执行此任务而不是 native ImageView

这是示例

android-remoteimageview

于 2012-12-07T07:52:48.877 回答
1

ListView滚动不顺畅的原因是您正在从主线程上的 InputStream 获取图像。这意味着,每当您要加载图像时,主线程都会被延迟,并且您的ListView.

解决方案是将图像加载到与主线程不同的线程上。这称为图像的延迟加载,通过启动一个新线程(主要使用 完成AsyncTask)来加载图像来完成。

以下是一些您可以访问的有趣链接作为示例:

http://andytui.wordpress.com/2012/05/10/tutorial-lazy-loading-list-views-in-android-binding-44/

http://codehenge.net/blog/2011/06/android-development-tutorial-asynchronous-lazy-loading-and-caching-of-listview-images/

http://thinkandroid.wordpress.com/2012/06/13/lazy-loading-images-from-urls-to-listviews/

https://github.com/commonsguy/cwac-endless

于 2012-12-07T09:57:25.827 回答