0

リストビューのスクロールがぎくしゃくする問題を特定しました。スクロール中にディスクから画像をロードしています。サンプルコードは次のとおりです。

private class MyAdapter extends ArrayAdapter<MyListItemExt> {
//...
public View getView(int position, View convertView, ViewGroup parent) {
//...        
                    Bitmap bit = SharedCode.sharedGetImageFromDiskOrInternet(thisAppContext, "contacts" + File.separator + data.image_file_name);                         
                    if (bit != null) {                                                                       
                      ViewTreeObserver vto = icon.getViewTreeObserver();
                      vto.addOnGlobalLayoutListener(
                        new OnGlobalLayoutListener() {
                          @Override
                          public void onGlobalLayout() {
                            icon.getViewTreeObserver().removeGlobalOnLayoutListener(this);                                                                 
                            icon.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
                            SharedCode.sharedUtilScaleImage(icon,false);                                
                          }
                        }                        
                      );                                                                       
                      icon.setImageBitmap(bit);                                                
                      icon.setBackgroundColor(data.backgroundColorInt);
                      icon.setPadding(1, 1, 1, 1);
                      icon.setVisibility(View.VISIBLE);
                    }

ここで async を使用するのが賢明かどうかはわかりません... (もしそうなら、それを行う最適な方法です) ユーザーがメインの ui スレッドでスクロールし、アイコンの参照が無効になった場合、それは悪いことです。

これにより、起動時にすべての画像をプリフェッチするという別のオプションが残されますが、画像をメモリに保持するのは好きではありません。

バックグラウンドで画像をロードし、ユーザーがまだリストビューに iem を表示している場合に、ロード時に画像を表示する非同期構造を使用することは可能ですか? これで「ベストプラクティス」はありますか?(私はまだAndroidの新人です)

4

2 に答える 2

2

画像キャッシュは完全な科学であり、新人でバグのないスムーズなパフォーマンスを期待する場合は、自分で行う価値はありません。

代わりに Google Volley ライブラリを実装してください (今年も素晴らしい IO トークがありました)

于 2013-07-08T00:25:16.467 に答える
2

もう 1 つのオプションは、AQueryを試してみることです。それは私にとって非常にうまく機能しています。

于 2013-07-08T01:20:56.820 に答える