お世話になっております。Android開発初心者です。
リストビューでデータベースのデータを表示しているのですが、sqliteのAUTOINCREMENT制約の為に、リストビュー表示のidと、リストビュー項目クリック時の詳細画面遷移後のidとで不整合が発生し、詳細画面データを、削除した項目以外と該当idとを、'&'を使って抽出したいと存じます。
例えば、項目を削除した場合、リストビュー項目は、以下のように表示されますが、
<id=4を削除した場合>
test1 id=1
test2 id=2
test3 id=3
test4 id=5
test5 id=6
クリック後の詳細画面では、
test1 id=1
test2 id=2
test3 id=3
test4 リストから消失
test5 id=4(空白画面)[リストタップのポジションは4です。]
リスト長押しで、項目がリストから削除される処理の為に、リストをタップしたポジションが4番目の際に、詳細画面のidが削除されたレコードを表示してしまい、中身が空白になっております。
AUTOINCREMENT制約をつけてもつけなくても結果は変わらず、削除項目が、「リストでは歯抜けで詰められる」「詳細画面では空白」という不整合が発生しております。
リストのidと、詳細画面のidを一致させる為に、計算してidを合わせましたが、
(現在の番号より小さい削除データが何個あるか、その個数をidに足す)
一度の削除では、上手く動くのですが、二度、三度、削除を繰り返しますと、
クリックリスナーのポジションは、データベースのidではなく、「クリックされた位置」を表すので、例えば「4番目の'id=5'をクリック」した際に、詳細画面では消失したid=4の空白になってしまいます。
データベースは果てしないもの、として捉えておりますので、全て計算のみで解決しようとしても不整合が起こる可能性があり、バグ発生の可能性も大きく、うまい方法が無いのか、悩んでおります。
私の考えましたことと致しまして、詳細画面でデータベースを読む際に、「空白以外を表示」させることで、問題解決に繋がる可能性があるのではないか、と思い、主題通り、”削除したレコード以外を抽出する方法”を模索しております。
抽出時に「is not null」も使ってみましたが、効果はありませんでした。
詳細画面のコードは
select実行後、普通に、
text1.setText(c5.getString(0)); text2.setText(c5.getString(1)); text3.setText(c5.getString(2)); text4.setText(c5.getString(3)); text5.setText(c5.getString(4));
このようにCursorを使い、データを抽出しております。
問題解決につきまして、ご見当がつきましたら、ご教授の程、宜しくお願い申し上げます。
回答1件
あなたの回答
tips
プレビュー