3

我有一个列表视图,它显示来自互联网的图像和文本。我的意图是这个图像,除了显示一个图像视图,是列表视图行的背景图像。这可行,但有问题。

在 listview 适配器中,我有 imageview:

imageLoader.DisplayImage (song.get (principal.KEY_PICTURE) my_imageView);

并在 LinearLayout 中使用图像:

imageLoader.DisplayImageLinear (song.get (principal.KEY_PICTURE) my_linearLayout);

这将调用以下方法:

public void DisplayImageLinear (String url, LinearLayout linearbck)
{
Bitmap bitmap = memoryCache.get (url);
Drawable d = new BitmapDrawable (bitmap);
if (bitmap! = null) {
linearbck (d);
}
else
{ linearbck.setBackgroundResource (R.drawable.list_selector); }
}

我的问题是,列表视图行的背景图像仅在列表视图滑出屏幕并重新输入时可见。

我希望我解释正确..这里有一张解释问题的图片

在此处输入图像描述

我尝试使用linearbck.invalidate(),但没有成功

我真诚地感谢任何帮助

谢谢

最好的祝福

编辑:

添加适配器。谢谢 :)

public class lstAdapter extends BaseAdapter {

    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater=null;
    public ImageLoader imageLoader; 

    public MinAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
        activity = a;
        data=d;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader=new ImageLoader(activity.getApplicationContext());
    }


    public int getCount() {
        return data.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.list_row, null);


        ImageView thumb_image=(ImageView)vi.findViewById(R.id.list_image); 
        ImageView photo_user =(ImageView)vi.findViewById(R.id.photoUser); 
        LinearLayout background =(LinearLayout)vi.findViewById(R.id.background);

        HashMap<String, String> song = new HashMap<String, String>();
        song = data.get(position);


        imageLoader.DisplayImage(song.get(principal.KEY_AVATAR_AUTOR_ENTRADA), thumb_image);
        imageLoader.DisplayImage(song.get(principal.KEY_PICTURE), photo_user);
        imageLoader.DisplayImageLinear(song.get(principal.KEY_PICTURE), background);


        return vi;
    }

    @Override 
    public boolean isEnabled(int position) 
    { 
        if(principal.asynTaskEnUso.equals("yes")){ 
            return false; 
        } else { 
            return true; 
        } 

    } 

}
4

1 回答 1

0

当我们看到 的来源时ImageLoader,当缓存中没有下载照片时,它会将照片排队。

=> 你没有在排队拍照。

下载照片后,它会从回调中设置为 ImageView 。

=>您可能(或很可能)不会将其设置LinearLayout为背景。

现在你的问题:

我的问题是,列表视图行的背景图像仅在列表视图滑出屏幕并重新输入时可见。

第一次,缓存是空的,它没有找到所需的照片,所以它去下载它,因为你还没有实现并排队等待LinearLayout回调中的设置为背景。它没有显示,但是当您滚动ListView并返回时,它会第一次找到图像(因为它已下载并缓存)并将其设置为背景。

解决方案:

维护并设置一些标志以跟踪您LinearLayout的参考,并在下载完成时将其设置为背景。

于 2012-12-26T12:40:02.007 回答