2017-01-18 5 views
0

확인란이있는 RecyclerView가 있습니다. 사용자가 체크 또는 체크 해제 할 때, 일치하는 제목을 포함하는 데이터베이스는 체크 박스가 체크되었는지 여부에 따라 부울을 업데이트합니다.RecyclerView Offscreen Checkbox 데이터

그러나이 목록에는 많은 확인란이 있기 때문에 그 중 일부는 화면에 표시되지 않으므로 항상 바인딩되지 않습니다.
사용자가 변경 사항을 저장하기 위해 확인을 클릭하면 체크 박스 목록을 검토하고 어떤 체크 박스가 선택되어 있는지 확인하고자합니다. 그러나 모든 것이 묶여 있지 않기 때문에 일부는 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

체크 된 모든 행에 대해 별도의 키/열을 만들고 항목을 선택하는 즉시 해당 키/열을 업데이트하고 확인해야 할 때이 키/열이 업데이트되었는지 여부를 확인하십시오 (true/false는 할 것이다) !! – shadygoneinsane

+0

@shadygoneinsane 문제는 사용자가 확인을 클릭 할 때만 설정하려는 경우입니다. 때로는 취소하려는 경우가 있기 때문입니다. – amitairos

+0

Ok를 누르면 키가 업데이트됩니다. 여기서 문제가 무엇인지 알 수 없습니다. 요소의 위치를 ​​사용하여 키 값을 매핑하십시오. 전체 어댑터 코드를 여기에 게시 할 수 있습니까? !! – shadygoneinsane

답변

1

네,하지만 문제가 몇 가지 바인더 제본되지 않기 때문에 일단 확인은, 내가 thecheckboxes의 모자 모든 값을 알고하지 않는 누를 것입니다 및 따라서 null을 반환합니다.

나는 당신이 해결 방법으로, 즉시이 그래서 onBindViewHolder

를 통해에서 스크롤됩니다으로 업데이 트됩니다, 당신 CheckBox이 항목은 오프 스크린 때 검색 할 수 없습니다 오른쪽 ViewHolder의를 보유하고있는 생각 , 나는 당신이 당신의 데이타베이스에서 그것들을 읽을 때 당신이 당신의 데이터의 사본을 만들 수 있고이 복사본을 RecyclerView의 데이터 자원으로 사용할 수 있다고 생각한다. CheckBox의 상태가 변경 될 때 Adapter에서 복사의 데이터를 변경한다.

마지막으로 변경 사항을 저장하기 위해 "확인"을 누르면 새 데이터 복사본이 데이터베이스에 저장되고 사용자가 취소하면 원래 데이터를 사용하여 RecyclerView을 새로 고칩니다.

아니면 다른 해결 방법을 통해 문제를 해결할 수 있습니다. 더 이상의 토론은 코멘트를 남겨주세요.