我有一个非常简单的Activity,它扩展了ListActivity。 我重写了onListItemClick方法,执行一些自定义操作。
我在日志中看到的是,在我单击列表项之后调用了适配器方法getView
(为了使我的列表由自定义视图组成,我也要覆盖它)。
现在,我想知道这是否是正确的行为。如果是的话我可能有问题。
问题是我的列表项目有图像,这些图像是从网页上获取的,当我点击列表项目时,对适配器的调用会导致调用Web清理列表中的图像并因某些原因弄乱它们
任何人都可以遮挡一些光吗?
这是我的getView
:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ContentListItemView cv = null;
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(this.context);
convertView = (RelativeLayout) inflater.inflate(this.layout, null);
cv = new ContentListItemView(convertView);
} else {
cv = (ContentListItemView) convertView.getTag();
}
Log.d(this.getClass().getSimpleName(), "position: " + position);
cv.init(getItem(position));
convertView.setTag(cv);
return convertView;
}
这是我的OnListItemClick
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
//Log.d(this.getClass().getSimpleName(), position + " " + id);
Intent contentDetailsIntent = new Intent(this, ContentDetailsActivity.class);
contentDetailsIntent.putExtra("com.tamtamy.jatta.content_list_item_selected", position);
contentDetailsIntent.putExtra("com.tamtamy.jatta.datasource", ContentDetailsActivity.CONTENT_LIST);
contentDetailsIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(contentDetailsIntent);
}
答案 0 :(得分:1)
如果它正在发生,那么如果它是正确与否则它并不真正相关,那么你需要处理它。
我的建议是在本地缓存图片in your apps cache directory,这样您每次都不需要通过网络抓取这些图片。
要注意的另一件事是列表项视图确实被回收,因此您的应用程序不应该假定在获取图像之前传递的ContentListItemView在下载图像之后仍然是同一行。做出这个不正确的假设通常是ListView行中图像不正确的原因。
查看讨论图像下载的multi-threading blog post on Googles Android developers blog,并提供指向Google代码示例的链接,该示例应为您提供有关如何解决图像加载问题的良好示例。