我有一个包含NetworkImageView
项目的列表,我面临一个奇怪的错误。我希望能够使用滑动手势删除列表项,因此我使用的是EnhancedListView库。问题是,当我使用滑动手势删除列表中的项目时,NetworkImageView
中的图像会变得模糊。
可以找到清除项目之前列表的屏幕截图here,并且可以找到使用滑动手势删除第一个元素后列表的屏幕截图{。{3}}。
当项目视图在适配器中被回收时,会出现问题。如果我没有ViewHolder
使用getView(int position, View convertView, ViewGroup parent)
并且每次都在mListView.setDismissCallback(new de.timroes.android.listview.EnhancedListView.OnDismissCallback() {
@Override
public EnhancedListView.Undoable onDismiss(EnhancedListView listView, final int position) {
final Cafe cafe = mAdapter.getItem(position);
mAdapter.removeAt(position);
return new EnhancedListView.Undoable() {
/**
* This method is called if undo button is pressed
*/
@Override
public void undo() {
mAdapter.insertAt(position, cafe);
}
/**
* Returns the text in the Toast next to "Undo"
* @return text
*/
@Override public String getTitle() {
return getString(R.string.removed_from_favorites);
}
/**
* This method is called after the undo text has been discarded.
* It must remove the favorite in the model.
*/
@Override public void discard() {
CafeHelper.getInstance().toggleCafeStarredStatus(cafe.getId());
}
};
}
});
mListView.enableSwipeToDismiss();
mListView.setSwipeDirection(EnhancedListView.SwipeDirection.START);
中对广告进行充气,则问题不会发生(即使在该情况下删除项目后列表会闪烁)。
以下是片段中使用滑动手势设置元素删除的代码:
mAdapter.removeAt(position);
您可以看到滑动手势只是调用getView(int position, View convertView, ViewGroup parent)
。以下是ViewHolder
方法的代码和适配器中static class ViewHolder {
TextView name;
NetworkImageView image;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater
.inflate(R.layout.fragment_starred_cafe_list_item, null);
viewHolder = new ViewHolder();
viewHolder.name = (TextView) convertView
.findViewById(R.id.starred_cafe_list_item_name);
viewHolder.image = (NetworkImageView) convertView
.findViewById(R.id.starred_cafe_list_item_image);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
viewHolder.image.setImageUrl(null, VolleySingleton.getInstance().getImageLoader());
}
Cafe cafe = getItem(position);
viewHolder.name.setText(cafe.getName());
viewHolder.image.setImageUrl(cafe.getThumbUrl(), VolleySingleton.getInstance().getImageLoader());
return convertView;
}
的定义:
ArrayAdapter
注意:
mAdapter.removeAt(position);
,同样的问题也出现了。我真的怀疑这个问题与适配器有关。ImageView
而不使用滑动删除库可以完美无缺地工作。NetworkImageView
和android-swipelistview加载图片可以毫无问题地工作。在挖掘Volley的代码后,似乎问题可能与获取{{1}}的宽度和高度有关,但我没有时间调试库。如果对Volley有深刻理解的人可以帮助查明问题并找到解决方案,那么欢迎您的回答。
答案 0 :(得分:2)
我有同样的问题,加载的图像模糊,我认为它是由布局属性引起的:
android:adjustViewBounds="true"
将其替换为下面的行解决它:
android:scaleType="centerCrop"
我认为你是对的,而Volley只能得到图像的原始宽度而不是某种调整之后的宽度