How to retain soft keyboard state after invalidateOptionsMenu android -


hi have used searchview below,

@override     public void oncreateoptionsmenu(menu menu, menuinflater inflater) {         super.oncreateoptionsmenu(menu, inflater);         menu.clear();         inflater.inflate(r.menu.all_menu, menu);         searchmanager manager = (searchmanager) getactivity().getsystemservice(context.search_service);         searchview searchview = (searchview) menu.finditem(r.id.menu_search).getactionview();         searchview.setsearchableinfo(manager.getsearchableinfo(getactivity().getcomponentname()));         searchtextview = (autocompletetextview) searchview.findviewbyid(android.support.v7.appcompat.r.id.search_src_text);         try {             field mcursordrawableres = textview.class.getdeclaredfield("mcursordrawableres");             mcursordrawableres.setaccessible(true);             mcursordrawableres.set(searchtextview, r.drawable.cursor); //this sets cursor resource id 0 or @null make visible on white background         } catch (exception e) {             e.printstacktrace();         }         if (searchview != null) {             searchview.setqueryhint(getstring(r.string.search));             searchview.setonquerytextlistener(this);         }         mmenu = menu;         setnotificationcount(mmenu);     } 

and i'm invalidating notification count using below code,

 getsupportactionbar().invalidateoptionsmenu(); 

but invalidating menu close opened keyboard. want retain keyboard state after invalidate action bar menus. have tried retain keyboard state using below code,

 keyboardvisibilityevent.seteventlistener(getactivity(), new keyboardvisibilityeventlistener() {                         @override                         public void onvisibilitychanged(boolean isopen) {                             if(!isfristtime){                                 log.d("ss","keyboard status before validated "+iskeyboardopened);                                 iskeyboardopened = isopen;                                 isfristtime = true;                             }                         }                     });                     getsupportactionbar().invalidateoptionsmenu();                     log.d("ss","keyboard status after validated "+iskeyboardopened);                     if(iskeyboardopened){                         final handler handler = new handler();                         handler.postdelayed(new runnable() {                             @override                             public void run() {                                 try {                                     log.d("ss","keyboard status in try ");                                     field mcursordrawableres = textview.class.getdeclaredfield("mcursordrawableres");                                     mcursordrawableres.setaccessible(true);                                     mcursordrawableres.set(searchtextview, r.drawable.cursor); //this sets cursor resource id 0 or @null make visible on white background                                     bdevice.showsoftkeyboard(getactivity(), searchtextview);                                     iskeyboardopened = false;                                     getsupportactionbar().invalidateoptionsmenu();                                 } catch (exception e) {                                     log.d("ss","keyboard status in catch ");                                     e.printstacktrace();                                 }                             }                         }, 1000);                     } 

but not work. want open soft keyboard if opened before invalidating menu. please suggest me idea retain keyboard state after invalidate menu?

i have found solution. whenever validating action bar menu oncreateoptionsmenu gets call. have store keyboard state first time keyboard gets opened , checking keyboard state in oncreateoptionsmenu after validating it. use expand searchview , open soft keyboard programmatically below,

global variables

private boolean isfristtime = false, iskeyboardopened = false; private string mcurrentquery = ""; 

then code in oncreateoptionsmenu method

 if(iskeyboardopened) {                 searchview.seticonified(false);                 searchitem.expandactionview();                 searchview.requestfocus();                 if(!textutils.isempty(mcurrentquery)){                     searchview.setquery(mcurrentquery, false);                 }else{                     searchview.setqueryhint(getstring(r.string.search));                 }                 searchview.seticonifiedbydefault(true);                 bdevice.showsoftkeyboard(getactivity(), searchtextview);                 iskeyboardopened = false;             }  

and i'm getting keyboard start before validation below,

keyboardvisibilityevent.seteventlistener(getactivity(), new keyboardvisibilityeventlistener() {                         @override                         public void onvisibilitychanged(boolean isopen) {                             if(!isfristtime){                                  iskeyboardopened = isopen;                                 isfristtime = true;                             }                         }                     });                      getsupportactionbar().invalidateoptionsmenu(); 

and getting query inside onquerytextchange method

   @override         public boolean onquerytextchange(string newtext) {            mcurrentquery = newtext;           return true;         } 

happy coding...


Comments

Popular posts from this blog

mysql - Dreamhost PyCharm Django Python 3 Launching a Site -

java - Sending SMS with SMSLib and Web Services -

java - How to resolve The method toString() in the type Object is not applicable for the arguments (InputStream) -