我有一个扩展 ListActivity 的非常简单的 Activity 。 我正在重写 onListItemClick 方法来执行一些自定义操作。
我在日志中看到的是,适配器方法 getView
在我单击一个列表项后被调用(我也覆盖了它以便让我的列表由自定义 View 组成)。
现在,我想知道这是否是正确的行为。如果是,我可能会遇到问题。
问题是我的列表项有图像,这些图像是从网络上获取的,当我单击列表项时,对适配器的调用导致对网络的调用刷新列表中的图像并由于某种原因将它们弄乱.
任何人都可以遮光吗?
这是我的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);
}
最佳答案
如果它正在发生,那么它是否正确并不重要,这是你必须处理的事情。
我的建议是在本地缓存图像 in your apps cache directory因此您无需每次都通过网络获取它们。
另一件需要注意的事情是列表项 View 确实会被回收,因此您的应用程序不应假设在获取图像之前传递的 ContentListItemView 在图像下载后仍然是同一行。做出这种不正确的假设通常会导致 ListView 行中出现不正确的图像。
看看 multi-threading blog post on Googles Android developers blog其中讨论了图片下载,并提供了指向 Google 代码示例的链接,该代码应该为您提供了一个很好的示例,说明如何解决您的图片加载问题。
关于Android ListActivity onListItemClick 调用适配器 getView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5023074/