我有一个Android小部件,在GridView
中显示用户缩略图。该代码遵循android示例代码,用于实现显示集合的小部件。以下是我的getViewAt()
方法的代码:
@Override
public RemoteViews getViewAt(int position)
{
if (mWidgetItems == null || position > mWidgetItems.size() - 1)
{
return getLoadingView();
}
WidgetUiUser user = mWidgetItems.get(position);
RemoteViews views = new RemoteViews(mContext.getPackageName(), R.layout.widget_grid_item);
views.setTextViewText(R.id.widgetLocation, user.getShortLocation());
views.setViewVisibility(R.id.widgetLocation, View.VISIBLE);
Intent srcIntent = ProfileActivity.createIntent(MyApplication.getInstance(), user, PageSourceHelper.Source.SOURCE_WIDGET);
srcIntent.setAction(IntentRoutingActivity.getUniqueIntentAction()); //required for this activity to work properly
views.setOnClickFillInIntent(R.id.widgetGridItemLayout, IntentRoutingActivity.createWidgetFillInIntent(srcIntent));
// Fetch bitmap synchronously
Bitmap bitmap = mImageFetcher.getBitmap(user.getImageUrl());
views.setImageViewBitmap(R.id.widgetImage, bitmap);
return views;
}
一切正常,所有网格项都能正确显示,同时快速执行同步图像加载。
但是,如果我在一个速度较慢的网络上运行应用程序,图像下载可能需要几秒钟,我很快就会看到许多网格项无法完全加载。我添加了一些logcat输出,并且可以看到适配器无法请求未加载的网格项。
因此,例如,我的小部件显示了一个3x3的用户网格,整个GridView
保持80左右。正常工作时,我看到前20个网格项周围的适配器请求,并且它们都正确加载。当图像加载速度很慢时,我看到适配器请求项目0,3,5和8(例如,它变化),但没有请求任何其他项目。如果我开始滚动GridView
,则会有更多项目开始被请求,但许多项目仍然无法请求。
似乎在getViewAt()
中花费太多时间会以某种方式打破显示行为,尽管android documentation表示在此方法中执行长操作是正常的。有人看过这个问题或知道解决方案吗?