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このタスクを実行するには、ネイティブの代わりに使用しますImageView

ここにサンプルがあります

android-remoteimageview

于 2012-12-07T07:52:48.877 に答える
1

スムーズにスクロールしない理由ListViewは、メインスレッドの InputStream から画像を取得しているためです。これは、画像をロードしたいときはいつでも、メインスレッドが遅延し、ListView.

解決策は、メイン スレッドとは別のスレッドに画像をロードすることです。これは画像の遅延読み込みと呼ばれ、画像を読み込むために新しいスレッド (ほとんどの場合は で行われAsyncTaskます) を開始することによって行われます。

例としてアクセスできる興味深いリンクを次に示します。

http://andytsui.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 に答える