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
Post a Comment