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