0

ExpandableListView行のフィールドに通常どおりデータを入力する があります。ただし、フィールドの 1 つはImageView、イメージへのパスが変数に格納されるフィールドです。問題は、リスト ビューの展開/折りたたみとスクロールが遅いことです。展開/折りたたみには約 1 秒かかります。これは正常ですか?速くする方法はありますか?以下のコードはImageView、パフォーマンスの背後にある理由であると思われるコードです(コメントしましたが、速度は許容範囲でした)

何ができるか教えてください。

String imagePath = prop.getImagePath();
if (imagePath.length() > 0) {
    Uri mainImgeUri = Uri.parse(imagePath);
    InputStream imageStream;
    try {
        imageStream = mActiviy.getContentResolver().openInputStream(mainImgeUri);
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inSampleSize = 8;
        Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream, null, options);
        holder.mainImage.setImageBitmap(yourSelectedImage);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}

imagePath変数 prop は、DB に文字列として格納されているデータベースから取得されたことに注意してください。リストを初期化する前にDBクエリが発生したため、パフォーマンスに影響はありません。

4

1 に答える 1

1

このコード ブロックがgetView()アダプターのメソッド内にあると想定していますholder.main...。もしそうなら、これはExpandableList各行に対して行われることを理解する必要があるため、これはひどい習慣です。getView()おそらくこれらすべての行に対して呼び出され、これらの画像が無関係に取得されるため、スクロールおよび展開/折りたたみ中に効果が顕著になるはずです。

これらの画像を保持するコレクションを設定してから、一度に一度に一括挿入する方がはるかに優れています。次に、この画像コレクションを使用して、展開可能なリストにデータを入力できます。convertViewまだ使用していない場合は、この手法の使用も検討してください。

于 2013-02-17T07:14:11.453 に答える