-1
- 我在自定义适配器中通过Picasso Library加载图像,然后将其显示在我的ListFragment中。当我尝试滚动时,某些图像更改顺序(我认为重复使用单元格是错误的)。
什么是异步下载图像的最佳地点?我使用viewholder在自定义适配器中执行此操作。listview更改订单
public class PostsAdapter extends BaseAdapter { private static final String TAG = "tag.example.tag"; private static final String URL_PREFIX = "http://someapi.com/v1/api/"; private Context mContext; private ArrayList<Post> mData; private static LayoutInflater inflater = null; public PostsAdapter(Context context, ArrayList<Post> data) { mContext = context; mData = data; inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) } @Override public boolean isEnabled(int position) { return true; } @Override public int getCount() { return mData.size(); } @Override public Object getItem(int i) { return i; } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { View v = view; ViewHolder holder = null; if(view == null) v = inflater.inflate(R.layout.post_listviewrow, null); holder = new ViewHolder(); holder.imageView = (ImageView) v.findViewById(R.id.imageView); Post post = (Post) mData.get(i); // Download image with Picasso holder.imageView.setTag(post.getPictureUrl()); Picasso.with(mContext).load(URL_PREFIX + post.getPictureUrl()).into(holder.imageView); return v; } static class ViewHolder { TextView titleTextView; ImageView imageView; } }
通常,当从Internet上加载东西时,我使用了一个AsyncTask。它可以防止视图不应该被关注的阻塞和分离任务。见[AsyncTask](http://developer.android.com/reference/android/os/AsyncTask.html) – 2014-09-25 09:53:27
@Remymoan毕加索正在做后台工作。如上所述,我可以使用AsyncTask制作自己的图片下载器。但问题是我应该在哪里放置我的后台任务? – pardnoj 2014-09-25 12:53:03
你可以把它放在一个单独的类文件中。我没有使用Picasa,但我认为Picasa已经在后台为您加载。如果是这样的话,你应该没问题。 – 2014-09-25 12:56:26