android - SearchView Filter Mode mode in a Listview is not working -


my main activity have listview , search view. listview shows entries database. works (load words/strings database). problem searchview. not filtering in listview strings/words when i'm typing text. so, happens nothing , don't know why.

three classes below: main activity, wordactivity , database. need help. i'm newbie.

bancodictionary (main acitivity)

public class bancodictionary extends activity  {  public static final string prefs_name = "myprefsfile1";   listview mlistview; searchview sv;   arrayadapter<worddefinition> adapter;   arraylist<worddefinition> allworddefinitions=new arraylist<worddefinition>();   dictionarydatabase dictionarydatabase;  @override public void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);      setcontentview(r.layout.main);       mlistview = (listview) findviewbyid(r.id.list);     sv = (searchview) findviewbyid(r.id.searchview1);      adapter =new arrayadapter<worddefinition>(this, android.r.layout.simple_list_item_1, allworddefinitions);     mlistview.setadapter(adapter);      sv.setonquerytextlistener(new onquerytextlistener() {          @override         public boolean onquerytextsubmit(string text) {             // todo auto-generated method stub             return false;         }          @override         public boolean onquerytextchange(string text) {               adapter.getfilter().filter(text);             return false;         }     });      mlistview.settextfilterenabled(true);        dictionarydatabase=new dictionarydatabase(this);      allworddefinitions=dictionarydatabase.getallwords();          collections.sort(allworddefinitions, new customcomparator());        mlistview.setadapter(new baseadapter() {          @override         public view getview(int position, view view, viewgroup parent) {             if (view==null) {                 view=getlayoutinflater().inflate(r.layout.list_item, parent, false);             }             textview textview=(textview) view.findviewbyid(r.id.listitemtextview);             textview.settext(allworddefinitions.get(position).word);              return view;         }          @override         public long getitemid(int arg0) {             // todo auto-generated method stub             return 0;         }          @override         public object getitem(int arg0) {             // todo auto-generated method stub             return null;         }          @override         public int getcount() {             // todo auto-generated method stub             return allworddefinitions.size();         }     });      mlistview.setonitemclicklistener(new onitemclicklistener() {          @override         public void onitemclick(adapterview<?> arg0, view view, int position,                 long arg3) {             intent intent =new intent(bancodictionary.this, worddefinitiondetailactivity.class);             intent.putextra("word", allworddefinitions.get(position).word);             intent.putextra("definition", allworddefinitions.get(position).definition);               startactivity(intent);         }     });   }    @override public boolean oncreateoptionsmenu(menu menu) {  // inflate menu; adds items action bar if present.  getmenuinflater().inflate(r.menu.main, menu);          return super.oncreateoptionsmenu(menu); }    public class customcomparator implements comparator<worddefinition> {         @override        public int compare(worddefinition p1, worddefinition p2) {           return p1.word.comparetoignorecase(p2.word);        }     }  } 

worddefinition

public class worddefinition { string word,definition;  public worddefinition(string word,arraylist<string> alldefinition) {     this.word=word;      stringbuilder stringbuilder=new stringbuilder();     (string string : alldefinition) {         stringbuilder.append(string);     }            this.definition=stringbuilder.tostring();  }  public worddefinition(string word,string alldefinition) {     this.word=word;          this.definition=alldefinition;  }     } 

dictionarydatabase

public class dictionarydatabase { private static final string tag = "dictionarydatabase";  public static final string key_word = searchmanager.suggest_column_text_1; public static final string key_definition = searchmanager.suggest_column_text_2;  private static final string database_name = "dictionary"; private static final string fts_virtual_table = "ftsdictionary"; private static final int database_version = 2;  private final dictionaryopenhelper mdatabaseopenhelper; private static final hashmap<string,string> mcolumnmap = buildcolumnmap();  public dictionarydatabase(context context) {     mdatabaseopenhelper = new dictionaryopenhelper(context); }  private static hashmap<string,string> buildcolumnmap() {     hashmap<string,string> map = new hashmap<string,string>();     map.put(key_word, key_word);     map.put(key_definition, key_definition);     map.put(basecolumns._id, "rowid " +             basecolumns._id);     map.put(searchmanager.suggest_column_intent_data_id, "rowid " +             searchmanager.suggest_column_intent_data_id);     map.put(searchmanager.suggest_column_shortcut_id, "rowid " +             searchmanager.suggest_column_shortcut_id);     return map; }     public cursor getword(string rowid, string[] columns) {     string selection = "rowid = ?";     string[] selectionargs = new string[] {rowid};      return query(selection, selectionargs, columns);  }  public cursor getwordmatches(string query, string[] columns) {     string selection = key_word + " match ?";     string[] selectionargs = new string[] {query+"*"};      return query(selection, selectionargs, columns);  }  private cursor query(string selection, string[] selectionargs, string[] columns) {      sqlitequerybuilder builder = new sqlitequerybuilder();     builder.settables(fts_virtual_table);     builder.setprojectionmap(mcolumnmap);      cursor cursor = builder.query(mdatabaseopenhelper.getreadabledatabase(),             columns, selection, selectionargs, null, null, key_word + " collate nocase asc");      if (cursor == null) {         return null;     } else if (!cursor.movetofirst()) {         cursor.close();         return null;     }     return cursor; }  private static class dictionaryopenhelper extends sqliteopenhelper {      private final context mhelpercontext;     private sqlitedatabase mdatabase;      private static final string fts_table_create =                 "create virtual table " + fts_virtual_table +                 " using fts3 (" +                 key_word + ", " +                 key_definition + ");";        dictionaryopenhelper(context context) {         super(context, database_name, null, database_version);         mhelpercontext = context;     }      @override     public void oncreate(sqlitedatabase db) {         mdatabase = db;         mdatabase.execsql(fts_table_create);         loaddictionary();     }        private void loaddictionary() {         new thread(new runnable() {             public void run() {                 try {                     loadwords();                 } catch (ioexception e) {                     throw new runtimeexception(e);                 }             }         }).start();     }      private void loadwords() throws ioexception {         log.d(tag, "loading words...");         final resources url = mhelpercontext.getresources();         inputstream input = new url("http://example.com.br/example.txt").openstream();           bufferedreader reader = new bufferedreader(new inputstreamreader(input));         try {             string line;             while ((line = reader.readline()) != null) {                 string[] strings = textutils.split(line, "//");                 if (strings.length < 2) continue;                 long id = addword(strings[0].trim(), strings[1].trim());                 if (id < 0) {                     log.e(tag, "unable add word: " + strings[0].trim());                 }             }         } {             reader.close();         }         log.d(tag, "done loading words.");     }       public long addword(string word, string definition) {         contentvalues initialvalues = new contentvalues();         initialvalues.put(key_word, word);         initialvalues.put(key_definition, definition);          return mdatabase.insert(fts_virtual_table, null, initialvalues);     }      @override     public void onupgrade(sqlitedatabase db, int oldversion, int newversion) {         log.w(tag, "upgrading database version " + oldversion + " "                 + newversion + ", destroy old data");         db.execsql("drop table if exists " + fts_virtual_table);         oncreate(db);     } }  public long insertdata(worddefinition worddefinition) {     sqlitedatabase database=mdatabaseopenhelper.getwritabledatabase();     contentvalues values=new contentvalues();      values.put(key_word, worddefinition.word);     values.put(key_definition, worddefinition.definition);      return database.insert(fts_virtual_table, null, values);          }     public long updatedata(worddefinition worddefinition) {     sqlitedatabase database=mdatabaseopenhelper.getwritabledatabase();     contentvalues values=new contentvalues();      values.put(key_word, worddefinition.word);     values.put(key_definition, worddefinition.definition);      return database.update(fts_virtual_table, values, key_word+" =?", new string[]{worddefinition.word});     }  public void deletedata(worddefinition worddefinition) {     sqlitedatabase database=mdatabaseopenhelper.getwritabledatabase();     string querystring="delete "+fts_virtual_table+" "+key_word+" = '"+worddefinition.word+"'";      database.execsql(querystring); }   public arraylist<worddefinition> getallwords() { arraylist<worddefinition> arraylist=new arraylist<worddefinition>(); sqlitedatabase database=mdatabaseopenhelper.getreadabledatabase();  string selectallquerystring="select * "+fts_virtual_table; cursor cursor=database.rawquery(selectallquerystring, null);  if (cursor.movetofirst()) {     {                     worddefinition worddefinition=new worddefinition(cursor.getstring(cursor.getcolumnindex(key_word)), cursor.getstring(cursor.getcolumnindex(key_definition)));         arraylist.add(worddefinition);                   } while (cursor.movetonext());           }    return arraylist; }  public worddefinition getworddefinition(string word) { sqlitedatabase database=mdatabaseopenhelper.getreadabledatabase(); worddefinition worddefinition=null;  string selectquerystring="select * "+fts_virtual_table+ " "+key_word+" = '"+word+ "'"; cursor cursor=database.rawquery(selectquerystring, null);  if (cursor.movetofirst()) {     worddefinition=new worddefinition(cursor.getstring(cursor.getcolumnindex(key_word)), cursor.getstring(cursor.getcolumnindex(key_definition)));  }     return worddefinition;  }  public worddefinition getworddefinition(long id) { sqlitedatabase database=mdatabaseopenhelper.getreadabledatabase(); worddefinition worddefinition=null;  string selectquerystring="select * "+fts_virtual_table+ " "+basecolumns._id+" = '"+id+ "'"; cursor cursor=database.rawquery(selectquerystring, null);  if (cursor.movetofirst()) {     worddefinition=new worddefinition(cursor.getstring(cursor.getcolumnindex(key_word)), cursor.getstring(cursor.getcolumnindex(key_definition)));  }     return worddefinition;     }    public void initializedatabaseforthefirsttime(arraylist<worddefinition> worddefinitions) { sqlitedatabase database=mdatabaseopenhelper.getwritabledatabase(); database.execsql("begin");  contentvalues contentvalues=new contentvalues();  (worddefinition worddefinition : worddefinitions) {     contentvalues.put(key_word, worddefinition.word);     contentvalues.put(key_definition, worddefinition.definition);                database.insert(fts_virtual_table, null, contentvalues); } database.execsql("commit");  }    } 

you seem using non generic object generic array adapter. default filter array adapter checks against object.tostring().tolowercase(). use filter dataset, either create custom adapter , filter or (and easier option @ stage) override tostring() in worddefinition return able filter by.


Comments