2017-02-10 1 views
1

긴 시간 lurker - 첫 번째 게시물 :커서 어댑터 내 ListView 새로 고침?

문제 : 이미지 버튼 (기본적으로 확인란 만)을 클릭하면 데이터베이스 행이 올바르게 업데이트되고 이미지가 적절한 부울로 변경됩니다. 그러나 다시 클릭하면 다시 업데이트되지 않고 동일한 메시지가 표시됩니다.

나는 문제가 있다고 생각한다. 나는 안드로이드에 다소 익숙하다. 그러나 데이터베이스가 올바르게 업데이트되고있는 동안 나는 확실히 bindview 변수가 아닌가?

내 커서 어댑터의 Bindview는 :

 @Override 
public void bindView(View view, final Context context, final Cursor cursor) { 
    final String id = cursor.getString(cursor.getColumnIndex(DBHELPER.WISHLIST_COLUMN_ID)); 
    final String name2 = cursor.getString(cursor.getColumnIndex(DBHELPER.WISHLIST_COLUMN_NAME)); 
    final String gift = cursor.getString(cursor.getColumnIndex(DBHELPER.WISHLIST_COLUMN_GIFT)); 
    final String specs = cursor.getString(cursor.getColumnIndex(DBHELPER.WISHLIST_COLUMN_SPECIFICS)); 
    final String store = cursor.getString(cursor.getColumnIndex(DBHELPER.WISHLIST_COLUMN_STORE)); 
    final String url = cursor.getString(cursor.getColumnIndex(DBHELPER.WISHLIST_COLUMN_URL)); 
    final String status = cursor.getString(cursor.getColumnIndex(DBHELPER.WISHLIST_COLUMN_STATUS)); 

    ImageButton checkBoxImage = (ImageButton) view.findViewById(R.id.ID_ROW_CHECKBOX); 

    if(status.equals("true")) 
    { 
     checkBoxImage.setImageResource(R.drawable.icon_yes); 
    } else { 
     checkBoxImage.setImageResource(R.drawable.icon_no); 
    } 

    checkBoxImage.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(status.equals("true")) 
      { 
       ContentValues values = new ContentValues(); 
       values.put(DBHELPER.WISHLIST_COLUMN_NAME, name2); 
       values.put(DBHELPER.WISHLIST_COLUMN_GIFT, gift); 
       values.put(DBHELPER.WISHLIST_COLUMN_SPECIFICS, specs); 
       values.put(DBHELPER.WISHLIST_COLUMN_STORE, store); 
       values.put(DBHELPER.WISHLIST_COLUMN_URL, url); 
       values.put(DBHELPER.WISHLIST_COLUMN_STATUS, "false"); 

       DBHELPER dbhelper = new DBHELPER(context); 
       SQLiteDatabase db = dbhelper.getWritableDatabase(); 

       db.update(DBHELPER.WISHLIST_TABLE_NAME, values,"_ID " + "='" + id + "'", null); 
       Message.message(context, "FALSE UPDATED"); 

       ImageButton checkBoxImage = (ImageButton) v.findViewById(R.id.ID_ROW_CHECKBOX); 
       checkBoxImage.setImageResource(R.drawable.icon_no); 

       db.close(); 
      } else { 
       DBHELPER dbhelper = new DBHELPER(context); 
       SQLiteDatabase db = dbhelper.getWritableDatabase(); 
       ContentValues values = new ContentValues(); 
       values.put(DBHELPER.WISHLIST_COLUMN_NAME, name2); 
       values.put(DBHELPER.WISHLIST_COLUMN_GIFT, gift); 
       values.put(DBHELPER.WISHLIST_COLUMN_SPECIFICS, specs); 
       values.put(DBHELPER.WISHLIST_COLUMN_STORE, store); 
       values.put(DBHELPER.WISHLIST_COLUMN_URL, url); 
       values.put(DBHELPER.WISHLIST_COLUMN_STATUS, "true"); 

       ImageButton checkBoxImage = (ImageButton) v.findViewById(R.id.ID_ROW_CHECKBOX); 
       checkBoxImage.setImageResource(R.drawable.icon_yes); 

       System.out.println("BEFORE : " + status); 
       db.update(DBHELPER.WISHLIST_TABLE_NAME, values,"_ID " + "='" + id + "'", null); 
       Message.message(context, "TRUE UPDATED"); 


       db.close(); 
      } 
     } 
    }); 

나는 시도 무엇 : 그래서 이미지를 클릭하고는 반대하지만 단지 내가 다시로드하지 않는 한 번 수 있도록 비자를 "선택 해제"또는 "확인"에서 갈거야 그 목록.

내가 시도한 것 : Requery가 계속 올라 왔지만 이제는 오래된 것으로 간주되어 피해야합니다. 나는 새로운 글에 대한 질의를 교환하는 것에 대해 이야기하는 몇 개의 글을 보았지만, 그것이 null 일 때 나는 null 에러를 얻었습니다. 그래서 그것이 대답인지 그리고 나는 단지 오해가 있습니다.

감사합니다.

답변

0

if 진술 내용 OnClickListener의 최신 상태 값으로 확인하지 않았습니다. OnClickListener 안에 다시 읽어야합니다. 이 같은 변경 코드 :

checkBoxImage.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     DBHELPER dbhelper = new DBHELPER(context); 
     SQLiteDatabase db = dbhelper.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 

     String[] columns = new String[]{DBHELPER.WISHLIST_COLUMN_NAME, DBHELPER.WISHLIST_COLUMN_GIFT, DBHELPER.WISHLIST_COLUMN_SPECIFICS, DBHELPER.WISHLIST_COLUMN_STORE, DBHELPER.WISHLIST_COLUMN_URL, DBHELPER.WISHLIST_COLUMN_STATUS}; 
     Cursor cursor2 = db.query(DBHELPER.WISHLIST_TABLE_NAME, columns, null, null, null, null, null); 

     String status2 = cursor2.getString(cursor2.getColumnIndex(DBHELPER.WISHLIST_COLUMN_STATUS)); 

     if("true".equals(status2)) { 
      values.put(DBHELPER.WISHLIST_COLUMN_NAME, name2); 
      values.put(DBHELPER.WISHLIST_COLUMN_GIFT, gift); 
      values.put(DBHELPER.WISHLIST_COLUMN_SPECIFICS, specs); 
      values.put(DBHELPER.WISHLIST_COLUMN_STORE, store); 
      values.put(DBHELPER.WISHLIST_COLUMN_URL, url); 
      values.put(DBHELPER.WISHLIST_COLUMN_STATUS, "false"); 

      db.update(DBHELPER.WISHLIST_TABLE_NAME, values,"_ID " + "='" + id + "'", null); 
      Message.message(context, "FALSE UPDATED"); 

      ImageButton checkBoxImage = (ImageButton) v.findViewById(R.id.ID_ROW_CHECKBOX); 
      checkBoxImage.setImageResource(R.drawable.icon_no); 
     } else { 
      values.put(DBHELPER.WISHLIST_COLUMN_NAME, name2); 
      values.put(DBHELPER.WISHLIST_COLUMN_GIFT, gift); 
      values.put(DBHELPER.WISHLIST_COLUMN_SPECIFICS, specs); 
      values.put(DBHELPER.WISHLIST_COLUMN_STORE, store); 
      values.put(DBHELPER.WISHLIST_COLUMN_URL, url); 
      values.put(DBHELPER.WISHLIST_COLUMN_STATUS, "true"); 

      ImageButton checkBoxImage = (ImageButton) v.findViewById(R.id.ID_ROW_CHECKBOX); 
      checkBoxImage.setImageResource(R.drawable.icon_yes); 

      System.out.println("BEFORE : " + status2); 
      db.update(DBHELPER.WISHLIST_TABLE_NAME, values,"_ID " + "='" + id + "'", null); 
      Message.message(context, "TRUE UPDATED"); 
     } 

     db.close(); 
    } 
}); 
+0

외부에 있어야합니다. Maarat. 당신은 문제를 설명하는 훌륭한 일을하고 동시에 같은 코드를 재사용하지 않도록 코드를 정리했습니다. 감사합니다! 추신 : 충분한 담당자가 없기 때문에 투표를 할 수 없지만 최선을 다해 답변을 선택했습니다. – SarcoShark

0

다음 코드는 onClick 방법의 내부에 배치해야합니다 : 그런데

if(status.equals("true")) 
    { 
     checkBoxImage.setImageResource(R.drawable.icon_yes); 
    } else { 
     checkBoxImage.setImageResource(R.drawable.icon_no); 
    } 

, 당신의 코드는 깨끗해야한다. values 선언은 if statement

관련 문제