2017-02-10 15 views
1

Долгосрочный lurker - первый пост:Обновление моего ListView в моем адаптере курсора?

Проблема: когда я нажимаю кнопку изображения (в основном, только флажки), они корректно обновляют строку базы данных и меняют образ на правильное логическое значение. Однако, когда я нажимаю на них снова - он не обновляется повторно и не выдает одно и то же сообщение.

Что я думаю о проблеме: я довольно новичок в Android, но я уверен, что, когда моя база данных правильно обновляется, переменные bindview не являются?

My Cursor Adapter 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(); 
      } 
     } 
    }); 

То, что я пробовал: Так я нажимаю изображение, и он будет идти от «проверено» на «непроверенный» или наоборот, однако, только это позволяет один раз, если я не перезагружать список.

То, что я пробовал: реквизит продолжал расти, но теперь это считается устаревшим и которого следует избегать. Я видел несколько сообщений, в которых говорилось о замене запроса на новый, но я продолжал получать нулевую ошибку, поэтому я не уверен, что это ответ, и я просто недопонимаю что-то или что.

Спасибо, оцените вас, ребята.

ответ

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

Спасибо, Маарат. Вы хорошо объяснили проблему и в то же время пошли вперед и очистили мой код, поэтому я не использовал повторную работу в тех же строках. Я ценю это! PS: Не могу проголосовать, потому что не хватает репутации, но я пошел вперед и выбрал ваш ответ как лучший, ура! – SarcoShark

0

Следующий код должен быть размещен внутри метода onClick:

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

Кстати, ваш код должен быть чище. Объявление values должно быть за пределами if statement