2012-01-16 6 views
0

ユーザーがEditTextに文字を入力すると、新しい設定の小さな問題が発生しました。AdapterからlistViewです。だから、私がやっていることは、私が最初にActivityを起動したときに、カーソルとカスタムアダプタを使ってデータベースからlistViewを読み込んでいます。 EditTextでテキストを入力すると、新しいSQL文が作成され、新しいCursorでデータが取得されます。その後、私は新しいカスタムアダプターを作成し、それを自分のリストビューに設定しようとしています。Androidは新しいカーソルをリストビューに設定しました

問題は、編集テキストを入力するときに、LogCatのLogsで、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()では、データを格納して新しいデータを格納するためにarraylistsをクリアするだけです。

0

この場合、データソースを消去するのは、パス、名前、カテゴリ、カウントです。 新しい結果をリストのデータソース(パス、名前、カテゴリ、カウント)にロードし、ドンのセットリストアダプタをnullに設定し、notifyDataSetChangedを呼び出します。

関連する問題