2017-01-18 2 views
0

私はチェックボックス付きのRecyclerViewを持っています。ユーザーがチェックを入れるかチェックを外すと、一致するタイトルを含むデータベースは、チェックボックスがチェックされているかどうかに応じてブール値を更新します。RecyclerViewオフスクリーンチェックボックスデータ

ただし、このリストには多くのチェックボックスが存在するため、一部はオフスクリーンで表示されるため、常にバインドされません。
ユーザーが[OK]をクリックして変更を保存すると、チェックボックスのリストを調べて、チェックボックスのチェックボックスをオンにします。しかし、それらのすべてが束縛されているわけではないので、いくつかはnullを返し、私はそれらをチェックすることはできません。

どうすれば解決できますか?ここで

は私のコードです:はい

OKButton.Click += (s, e) => 
     { 
      SQLiteDatabase db = SQLiteDatabase.OpenDatabase(dbPath, null, DatabaseOpenFlags.OpenReadwrite); 
      for (int i = 0; i < mAdapter.ItemCount; i++) 
      { 
       try 
       { 
        if ((mRecyclerView.FindViewHolderForAdapterPosition(i) as TimesSettingsAdapter.MyView).mTime.Checked) 
        { 
         string sql = "UPDATE Times SET Show = 'yes' WHERE Id = " + (i + 1).ToString(); 
         db.ExecSQL(sql); 

        } 
        else 
        { 
         string sql = "UPDATE Times SET Show = 'no' WHERE Id = " + (i + 1).ToString(); 
         db.ExecSQL(sql); 

        } 
       } 
       catch 
       { 

       } 
      } 
     } 
+0

チェックしたすべての行に対して個別のキー/列を作成し、アイテムがチェックされるとすぐにそのキー/列を更新し、チェックする必要があるときに、このキー/列が更新されたかどうかをチェックします偽はするだろう)!! – shadygoneinsane

+0

@shadygoneinsane問題は、ユーザーが[OK]をクリックしたときにチェックするときではなく、キャンセルしたいときがあるためです。 – amitairos

+0

Okを押したときにキーを更新します。ここに問題が何も表示されません 要素の位置を使用してキー値をマップします ここにアダプタコード全体を投稿できますか。 – shadygoneinsane

答えて

1

が、問題は、OKを押すと、一部がバインドされていないので、私は、thecheckboxesのすべての値がある帽子を知らないということで、したがってnullを返します。私は、あなたは正しい、この項目がオフスクリーン、それは回避策として、できるだけ早くそれはそうonBindViewHolder

経由でスクロールにつれて更新されますされている場合、あなたのCheckBoxを保持ViewHolder sが取得できないと思います

私はあなたがあなたのデータベースからそれらを読んだときあなたのデータのコピーを作ることができると思うし、このコピーをあなたのRecyclerViewのデータリソースとして使用すると、CheckBoxのステータスが変更されたときにアダプタのコピーのデータを変更してください。

最後に、ユーザーが変更を保存するために「OK」を押すと、新しいデータコピーがデータベースに保存され、キャンセルする場合は元のデータを使用してRecyclerViewを更新します。

また、問題を解決するためのその他の回避策があります。それ以上の議論は、コメントを残してください。