android - Searching in a ListFragment using LoaderEX -


i'm having major block trying search data in lists generated using cursors prepopulated sqlite db.

i'm using following libs:

when start app, list empty , when type letters on searchview, nothing displayed. query used works because before trying implement library data displayed.

import android.database.cursor; import android.os.bundle; import android.support.v4.app.loadermanager; import android.support.v4.content.loader; import android.text.textutils; import android.view.view; import android.widget.listview; import android.widget.toast;  import com.actionbarsherlock.app.sherlocklistfragment; import com.actionbarsherlock.view.menu; import com.actionbarsherlock.view.menuinflater; import com.actionbarsherlock.widget.searchview; import com.actionbarsherlock.widget.searchview.onquerytextlistener; import com.commonsware.cwac.loaderex.acl.sqlitecursorloader;  import es.nirvash.android.mvptimer.adapters.moblistadapter; import es.nirvash.android.mvptimer.database.databasemanager;  public class fragmvp extends sherlocklistfragment implements loadermanager.loadercallbacks<cursor> {      private databasemanager database;     private moblistadapter madapter;     private sqlitecursorloader mloader;     private string currentquery = null;     private final static int mvp_id = 1100;      @override     public void onactivitycreated(bundle savedinstancestate) {         super.onactivitycreated(savedinstancestate);         sethasoptionsmenu(true);          database = new databasemanager(getsherlockactivity());          cursor cursor = database.moblist("2");          if (cursor != null) {             madapter = new moblistadapter(getactivity(), cursor, false);             setlistadapter(madapter);         }         getloadermanager().initloader(mvp_id, null, fragmvp.this);     }  @override     public void oncreateoptionsmenu(menu menu, menuinflater inflater) {         inflater.inflate(r.menu.menu, menu);         searchview searchview = (searchview) menu.finditem(r.id.menu_search).getactionview();         searchview.setonquerytextlistener(querylistener);     }      final private onquerytextlistener querylistener = new onquerytextlistener() {          @override         public boolean onquerytextchange(string newtext) {             if (textutils.isempty(newtext)) {                 currentquery = "";                 toast.maketext(getactivity(), "searching for: " + currentquery + "...", toast.length_short).show();             } else {                 currentquery = newtext;                 toast.maketext(getactivity(), "searching for: " + currentquery + "...", toast.length_short).show();              }             return false;         }          @override         public boolean onquerytextsubmit(string query) {             currentquery = query;             return false;         }     };      @override     public loader<cursor> oncreateloader(int id, bundle bargs) {         string query =          "select mo._id, mo.sprite, mo.iname, mo.lvl, mo.hp, ra.race, pr.property, mo.counter " +         "from mobs mo " +         "join race ra on (ra._id = mo.race) " +         "join property pr on (pr._id = mo.property) " +         "where mo.mobtype = ? " +         "and mo.iname ? " +         "order mo.iname " +         "asc;";         string = "%" + currentquery + "%";         string[] args = { "2", };          mloader = new sqlitecursorloader(getactivity(), database, query, args);          return (mloader);     }      @override     public void onloadfinished(loader<cursor> loader, cursor cursor) {         madapter.changecursor(cursor);         if (isresumed()) {             setlistshown(true);         } else {             setlistshownnoanimation(true);         }     }      @override     public void onloaderreset(loader<cursor> loader) {         madapter.changecursor(null);     } } 

what doing wrong? thank in advance.

thanks commonsware, figured out putting initloader() method inside onactivitycreated wrong because called once.

instead, should put restartloader() method inside funcion called everytime searchview gets updated, onquerytextchange.

final private onquerytextlistener querylistener = new onquerytextlistener() {      @override     public boolean onquerytextchange(string newtext) {         if (textutils.isempty(newtext)) {             currentquery = "";             toast.maketext(getactivity(), "searching for: " + currentquery + "...", toast.length_short).show();         } else {             currentquery = newtext;             toast.maketext(getactivity(), "searching for: " + currentquery + "...", toast.length_short).show();         }         **getloadermanager().restartloader(mvp_id, null, fragmvp.this);**         return false;     }      @override     public boolean onquerytextsubmit(string query) {         currentquery = query;         return false;     } }; 

Comments

Popular posts from this blog

c# - Operator '==' incompatible with operand types 'Guid' and 'Guid' using DynamicExpression.ParseLambda<T, bool> -