[解決済み] AndroidのRecyclerViewでnotifyItemRemovedまたはnotifyDataSetChangedを使用する。
2023-04-30 20:41:26
質問
RecyclerViewを使用して表示するカードのリストを作成しています。各カードには、リストからそのカードを削除するためのボタンがあります。
私は notifyItemRemoved() を使ってRecyclerViewのカードを削除すると、アイテムは削除され、アニメーションも正常に行われますが、リストのデータが正しく更新されません。
もしその代わりに notifyDataSetChanged() に切り替えると、リスト内のアイテムは正しく削除・更新されますが、カードはアニメーションしません。
どなたかnotifyItemRemoved()の使用経験があり、notifyDataSetChangedと異なる挙動をする理由をご存知の方はいらっしゃいませんか?
以下は、私が使用しているコードの一部です。
private List<DetectedIssue> issues = new ArrayList<DetectedIssue>();
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
if(position >0){
RiskViewHolder riskHolder = (RiskViewHolder)holder;
final int index = position - 1;
final DetectedIssue anIssue = issues.get(index);
riskHolder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
int index = issues.indexOf(anIssue);
issues.remove(anIssue);
notifyItemRemoved(index);
//notifyDataSetChanged();
} catch (SQLException e) {
e.printStackTrace();
}
}
});
}
}
@Override
public int getItemCount() {
return (issues.size()+1);
}
どのように解決するのですか?
pskink が示唆したように、私の場合は (index+1) となるはずでした。
notifyItemRemoved(index+1)
というのは、おそらく一番上のインデックスを予約しているからです。
position=0
をヘッダーに使用します。
関連
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み] 設定ページに移動せずに位置情報サービスをオンにする
-
[解決済み] Android Webview - キャッシュを完全に削除する
-
[解決済み] 文字サイズとアンドロイドの画面サイズの違い
-
[解決済み] AsyncTaskLoaderとAsyncTaskの比較
-
[解決済み] アンドロイドボタンセレクター
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 設定ページに移動せずに位置情報サービスをオンにする
-
[解決済み] アンドロイドフラグメント onRestoreInstanceState
-
[解決済み] Android Webview - キャッシュを完全に削除する
-
[解決済み] HttpPostによる画像送信
-
[解決済み] handler.postDelayed()を停止する。
-
[解決済み] AppCompat-v7 21でアクションバー/ツールバーにアイコンを表示する。
-
[解決済み] アプリ内課金テスト:android.test.purchased already owned
-
[解決済み] ProjectScopeServices に Factory タイプのサービスはありません。
-
[解決済み] AsyncTaskLoaderとAsyncTaskの比較
-
[解決済み] Google Play ストア内部テストのロールアウトが開始できない