【发布时间】:2015-08-24 19:28:30
【问题描述】:
我有下面的 ListView 适配器代码!它工作正常,但是当它从服务器加载图像时,它会阻塞 UI。我将 BitmapFactory.decodeStream() 方法放在单独的线程中,然后它只为列表视图中的第一个对象加载一个图像有什么想法吗?
@Override
public int getCount() {
return applicationList.size();
}
@Override
public ApplicationPojo getItem(int position) {
return applicationList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public View getView(final int position, View view, ViewGroup parent)
{
if (view == null)
{
holder = new ViewHolder();
view = inflater.inflate(R.layout.singleapp, null);
holder.appName = (TextView) view.findViewById(R.id.appName);
holder.developer = (TextView) view.findViewById(R.id.developer);
holder.rate = (TextView) view.findViewById(R.id.rateApp);
view.setTag(holder);
}
else
{
holder = (ViewHolder) view.getTag();
}
try
{
final View finalView = view;
holder.logo = (ImageView) finalView.findViewById(R.id.appLogo);
logoName = applicationList.get(position).getLogo();
logoImg = BitmapFactory.decodeStream((InputStream) new URL(IPClass.SERVERIP + logoName).getContent());
holder.logo.setImageBitmap(logoImg);
holder.appName.setText(applicationList.get(position).getName());
holder.developer.setText(applicationList.get(position).getDeveloper());
holder.rate.setText(String.valueOf(applicationList.get(position).getRate()));
}
catch (Exception ex)
{
Log.d("Adapter Exception", ex.toString());
}
return view;
}
public class ViewHolder
{
ImageView logo;
TextView appName;
TextView developer;
TextView rate;
}
【问题讨论】:
-
有数百个与此相关的 SO 帖子。除了搜索,这里是一个不错的起点:developer.android.com/training/displaying-bitmaps/…
-
您好,只需搜索 Async Task,然后将我在下面发布的行放在 AsyncTask 中...
-
我没有看到您的 decodeStream 在单独的线程中工作...
标签: android multithreading listview