android - How to keep keyboard open on focus change, but not close and re-open -
i have onfocuschangelistener:
view.onfocuschangelistener onfocuschangelistener = new view.onfocuschangelistener() { @override public void onfocuschange(view v, boolean hasfocus) { inputmethodmanager myimm = (inputmethodmanager)getsystemservice(context.input_method_service); if(hasfocus) { myimm.togglesoftinput(inputmethodmanager.show_implicit, 0); } else { myimm.hidesoftinputfromwindow(v.getwindowtoken(), 0); } } }; i set listener every edittext make programmatically. works, not. gives lot of warnings this:
w/iinputconnectionwrapper: gettextbeforecursor on inactive inputconnection w/iinputconnectionwrapper: gettextbeforecursor on inactive inputconnection w/iinputconnectionwrapper: gettextbeforecursor on inactive inputconnection w/iinputconnectionwrapper: gettextbeforecursor on inactive inputconnection w/iinputconnectionwrapper: gettextbeforecursor on inactive inputconnection w/iinputconnectionwrapper: gettextbeforecursor on inactive inputconnection and can see keyboard closing , re-opening. so, think problem because open , close keyboard many times. how can save keyboard status? so, if new focus edittext, keyboard doesn't closed.
sorry bad english, hope understand.
the problem way doing it, bound happen. giving 2 3 asynchronous calls. myimm.togglesoftinput , hidesoftinput getting called @ same time 2 different views:
- that getting focus ,
- that releasing focus.
now call goes through service , there no guarantee call received input method first, hence behaviour random.
now if want keyboard open when view in focus need this
inputmethodmanager myimm = (inputmethodmanager)getsystemservice(context.input_method_service); myimm.showsoftinput(view, 2); all of above code needed if trying open keyboard on focus of view doesn't open keyboard automatically if using edit texts don't think want listener.
if need hide keyboard suggest this:
- create handler , send delayed request it.
- remove older messages , keep latest request.
private static class searchhandler extends handler { private weakreference<cityselectionactivity> mtarget; searchhandler(cityselectionactivity target) { mtarget = new weakreference<>(target); } public void settarget(cityselectionactivity target) { mtarget.clear(); mtarget = new weakreference<>(target); } @override public void handlemessage(final message msg) { if (msg.what == 0) { inputmethodmanager myimm = (inputmethodmanager) mtarget.get().getsystemservice(context.input_method_service); myimm.showsoftinput((view)msg.obj,0); } if(msg.what ==1){ inputmethodmanager myimm = (inputmethodmanager) mtarget.get().getsystemservice(context.input_method_service); myimm.hidesoftinputfromwindow(((view)msg.obj).getwindowtoken(),0); } } } view.onfocuschangelistener onfocuschangelistener = new view.onfocuschangelistener() { @override public void onfocuschange(view v, boolean hasfocus) { message message = new message(); message.obj = v; if (hasfocus) { message.what = 0; handler.removemessages(0); handler.removemessages(1); handler.sendmessagedelayed(message, 200); } else { message.what = 1; handler.removemessages(0); handler.removemessages(1); handler.sendmessagedelayed(message, 200); } } };
Comments
Post a Comment