2012-01-16 2 views
0

У меня есть небольшая проблема с настройками нового Adapter на listView, когда пользователь вводит буквы в EditText. Итак, что я делаю, когда мой Activity запускается в первый раз, я заполняю listView из базы данных с помощью курсора и пользовательского адаптера. Когда пользователь вводит какой-либо текст в EditText, я создаю новый оператор sql и получаю данные с новым курсором. После этого я создаю новый пользовательский адаптер и пытаюсь установить его в свой список.Android установил новый курсор в списокView

Проблема в том, что когда я начинаю вводить текст редактирования, я могу видеть в Logs из LogCat, что оператор sql является правильным и размер курсора, но мой ListView не заполняется новыми данными. Он остается тем же. Вот как я это делаю:

Это, как я наполнение ListView на первый раз:

cursor = userDbHelper.executeSQLQuery(sqlQuery); 

     if (cursor.getCount() == 0) { 
      noCards.setVisibility(View.VISIBLE); 
      noCards.setText(getString(R.string.no_cards)); 
     } else if (cursor.getCount() > 0) { 
      noCards.setVisibility(View.GONE); 
       for (cursor.move(0); cursor.moveToNext(); cursor.isAfterLast()) { 
        objectId = Integer.parseInt(cursor.getString(cursor.getColumnIndex("objectId"))); 
        cardId.add(objectId); 

        title = cursor.getString(cursor.getColumnIndex("title")); 
        catTitle = cursor.getString(cursor.getColumnIndex("catTitle")); 
        int repeats = Integer.parseInt(cursor.getString(cursor.getColumnIndex("repeatsCount"))); 
        count.add(repeats); 

        if(extra != 0){ 
           String cardsm = "SELECT objectId FROM cardmedias " 
               + "WHERE cardId=" 
               + objectId 
               + " AND mediaType=" 
               + 5012; 

           Cursor cardsM = userDbHelper.executeSQLQuery(cardsm); 
           if (cardsM.getCount() == 0) { 


           } else if (cardsM.getCount() > 0) { 
            for (cardsM.move(0); cardsM.moveToNext(); cardsM.isAfterLast()) { 
             objectID = Integer.parseInt(cardsM.getString(cardsM.getColumnIndex("objectId"))); 

             String filename = "mediacard-"+objectID; 
             if(storageID==1){ 
              path = RPCCommunicator.getImagePathFromInternalStorage(servername, userId, filename, this); 
             } else if(storageID==2){ 
              path = RPCCommunicator.getImagePathFromExternalStorage(servername, userId, filename); 
             } 
             hm.put(objectID, path); 

             path = hm.get(objectID); 
             Log.i("","path : "+path); 
             paths.add(path); 
             names.add(title); 
             categories.add(catTitle); 
            } 
           } 
        } else if (extra==0){ 
         names.add(title); 
         categories.add(catTitle); 
        } 
       } 
     } 
     cursor.close(); 
     adapter = new LazyAdapter(this, paths, names, categories, count); 
     listView.setAdapter(adapter); 

и это, как я создаю новый курсор и адаптер с TextWatcher:

searchString = ""; 
    sqlQuery = getSqlQuery(sort, collId, ascDesc,searchString); 

    searchBar.addTextChangedListener(new TextWatcher() { 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 

     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     public void afterTextChanged(Editable s) { 
      check = 1; 
      listView.setAdapter(null); 
      searchString = s.toString(); 
      Log.e("","searchString : "+searchString); 
      sqlQuery = getSqlQuery(sort, collId, ascDesc,searchString); 
      Log.e(""," sqlquery : "+sqlQuery); 
      Cursor cursor = userDbHelper.executeSQLQuery(sqlQuery); 
      Log.e("","cursor count : "+cursor.getCount()); 
      if (cursor.getCount() == 0) { 
       noCards.setVisibility(View.VISIBLE); 
       noCards.setText(getString(R.string.no_cards)); 
      } else if (cursor.getCount() > 0) { 
       noCards.setVisibility(View.GONE); 
        for (cursor.move(0); cursor.moveToNext(); cursor.isAfterLast()) { 
         objectId = Integer.parseInt(cursor.getString(cursor.getColumnIndex("objectId"))); 
         cardId.add(objectId); 

         title = cursor.getString(cursor.getColumnIndex("title")); 
         catTitle = cursor.getString(cursor.getColumnIndex("catTitle")); 
         int repeats = Integer.parseInt(cursor.getString(cursor.getColumnIndex("repeatsCount"))); 
         count.add(repeats); 

         if(extra != 0){ 
            String cardsm = "SELECT objectId FROM cardmedias " 
                + "WHERE cardId=" 
                + objectId 
                + " AND mediaType=" 
                + 5012; 

            Cursor cardsM = userDbHelper.executeSQLQuery(cardsm); 
            if (cardsM.getCount() == 0) { 

            } else if (cardsM.getCount() > 0) { 
             for (cardsM.move(0); cardsM.moveToNext(); cardsM.isAfterLast()) { 
              objectID = Integer.parseInt(cardsM.getString(cardsM.getColumnIndex("objectId"))); 

              String filename = "mediacard-"+objectID; 
              if(storageID==1){ 
               path = RPCCommunicator.getImagePathFromInternalStorage(servername, userId, filename, OwnedStampii.this); 
              } else if(storageID==2){ 
               path = RPCCommunicator.getImagePathFromExternalStorage(servername, userId, filename); 
              } 
              hm.put(objectID, path); 

              path = hm.get(objectID); 
              Log.i("","path : "+path); 
              paths.add(path); 
              names.add(title); 
              categories.add(catTitle); 
             } 
            } 
         } else if (extra==0){ 
          names.add(title); 
          categories.add(catTitle); 
         } 
        } 
      } 
      cursor.close(); 

      LazyAdapter adapter = new LazyAdapter(OwnedStampii.this, paths, names, categories, count); 
      listView.setAdapter(adapter); 

     } 
    }); 

Итак, любые идеи, как я могу обновить свой список Просмотр с помощью нового адаптера. Я уже пробовал с adapter.notifySetDataChanged();, и он не работает.

Заранее благодарен!

ответ

0

Я исправляю это, в моем afterTextChanged() Я просто очищаю арраистов, использующих для хранения данных и размещения новых данных.

0

очистить источники данных, в этом случае это дорожки, имена, категории, счет. Загрузите новые результаты в источники данных списка (пути, имена, категории, счет) и адаптер набора донтов в нуль и вызовите notifyDataSetChanged.

Смежные вопросы