我在这里遵循了这个例子:https ://developer.android.com/training/material/lists-cards.html
发生了什么:
当我滚动时,列表(RecyclerView)正在混淆数据。即当我向下滚动后向上滚动时,某些列表项会重复,不显示正确的内容。
这是我的onBindViewHolder
方法:
// cardsData is a List of MyCardItem (MyCardItem is just a holder of information,
// such as an id, String title, String summary, and other info to display on a card
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position)
{
// Update view here
if (!cardsData.isEmpty())
{
viewHolder.updateDisplay(cardsData.get(position), activity, position);
}
}
这是我updateDisplay
在 ViewHolder 类中找到的方法:
// Set ID
if (item.getID() != null)
{
mIDView.setText(item.getID());
}
// Set Title
if (item.getTitle() != null)
{
mTitleView.setText(item.getTitle());
}
// Set Summary
if (item.getSummary() != null)
{
mSummaryView.setText(Html.fromHtml(item.getSummary()));
}
// Image
if (item.hasImage())
{
// Display image here
}
我相信这与有时数据为空的事实有关,所以我选择不显示它。并非所有项目(卡片)都会显示图像,所以这就是我检查项目是否应该有图像的原因。如果是这样,那么我会做一些花哨的代码来显示图像(并制作其他视图GONE
,以便我只能显示该图像等)。
在调试时,我强制所有卡片在标题中显示它们的 ID 和位置。我可以确认所有 id 和位置都在适当的位置。当我强制(删除对 id、title 和 summary 的 if 检查)id、title 和 summary 显示时,即使为空,该内容也不受影响。但是,这并不能解决我的图像情况(并不总是有图像)。然后,我将有一些图像占据某个 id/位置的位置,它不应该出现在该位置(即,它不显示摘要文本,而是显示不应该存在的图像)。
关于为什么在我的 RecyclerView 中发生这种情况的任何输入?