我使用fun String.intOrString() = try { // returns Any
toInt()
} catch(e: NumberFormatException) {
this
}
来显示图片网格,但有些图片显示在错误的位置,或者出现两次或更多次。
这是我的Picasso
方法的代码:
onBindViewHolder
使用 @Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int position) {
PhotoViewHolder photoViewHolder = (PhotoViewHolder) viewHolder;
// photoViewHolder.setIsRecyclable(false);
File imageDir = context.getDir(IMAGE_DIR, Context.MODE_PRIVATE);
Post userPost = dataset.get(photoViewHolder.getAdapterPosition() - 1);
if (networkUtils.isOnline()) {
Picasso.with(context)
.load(userPost.getImage())
.placeholder(R.color.image_placeholder_color)
.centerCrop()
.fit()
.into(photoViewHolder.imageView);
} else {
String postId = String.valueOf(userPost.getPostId());
if (imageDir.exists()) {
Picasso.with(context)
.load(new File(imageDir + "/" + postId + IMAGE_SUFFIX))
.placeholder(R.color.image_placeholder_color)
.centerCrop()
.fit()
.into(photoViewHolder.imageView);
}
}
photoViewHolder.imageView.setOnClickListener(view ->
BusProvider.getInstance().post(new OpenUserProfilePhotoEvent(
userPost.getPostId(), Integer.valueOf(accountId))));
}
有助于解决此问题,但它超出了setIsRecyclable(false)
的目的。
你能找到RecyclerView
的错误吗?
答案 0 :(得分:0)
使用dataset.get(position)代替dataset.get(photoViewHolder.getAdapterPosition() - 1)。