ここでこの例に従いました: 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
}
データが null になることがあるという事実と関係があると思うので、表示しないことにしました。すべてのアイテム (カード) に表示する画像があるわけではないため、アイテムに画像があるかどうかを確認します。もしそうなら、私は画像を表示するためにいくつかの派手なコードを実行します (そして、その画像のみを表示できるように他のビューを作成します)。GONE
デバッグ中に、すべてのカードの ID と位置をタイトルに表示するように強制しました。すべての ID と位置が適切な場所にあることを確認できます。強制的に (id、タイトル、および概要の if チェックを削除して) ID、タイトル、および概要を表示するようにすると、null であっても、そのコンテンツは影響を受けなくなります。ただし、これは私の画像の状況を解決しません (常に画像があるとは限りません)。次に、特定の id/position の場所を占める画像をいくつか用意します(つまり、要約テキストを表示する代わりに、そこにあるはずのない画像を表示します)。
なぜこれが私の RecyclerView で起こっているのかについての情報はありますか?