android - adjustpan not work in expandablelistview when click second time for the same edittext -


first time,click edittext in expandablelistview,the whole layout scrolled ,and user can see edittext. click softkeyboard finish collapse softkeyboard , click edittext second time ,softkeyboard show, whole layout not scrolled, , user cannot see edittext. find in listview ,too.i searched long time , 1 says anroid bug? there replacement?

by many days spent,i found solution. hack.

  1. put edittext wrapped in linearlayout.
  2. detect softkeyboard show visiable layout change.

     public final void setkeyboardlistener(final onkeyboardvisibilitylistener listener) {   final view activityrootview = getwindow().getdecorview()     .findviewbyid(android.r.id.content);      activityrootview.getviewtreeobserver()     .addongloballayoutlistener(new ongloballayoutlistener() {        private final rect r = new rect();       private boolean wasopened;        @override       public void ongloballayout() {         activityrootview.getwindowvisibledisplayframe(r);          int heightdiff = activityrootview.getrootview().getheight()             - (r.bottom - r.top);         boolean isopen = heightdiff > 100;          if (isopen == wasopened) {           return;         }          wasopened = isopen;         listener.onvisibilitychanged(isopen);       }     });    }    public interface onkeyboardvisibilitylistener {     void onvisibilitychanged(boolean visible);     } 
  3. when softkeyboard show,pick textview in listview item or expandablelistview child item. set text thing, whole view scrolled normal! code this:

    activity.setkeyboardlistener(new onkeyboardvisibilitylistener() {   @override public void onvisibilitychanged(boolean visible) { if (visible) {   message message = new message();   message.what = 999;   handler.sendmessage(message);   }  } }); private handler handler = new handler() {  @override public void handlemessage(message msg) { if (msg.what == 999) {   if (mdatamap.size() > 0) {   (int = 0; < expandablelistview.getchildcount(); i++) {     view v = expandablelistview.getchildat(i);     textview tvcannotsee = (textview) v.findviewbyid(r.id.tv_cannot_see );     if (tvcannotsee != null) {       //this key hack make adjuspan work! , scroll whole view normal       tvcannotsee.settext("this android bug");       return;       }     }    }    return;   }  super.handlemessage(msg);  } }; 
  4. this textview show invisble user proper purpose.if expandablelistview , edittext in childitem,the textview update must in childitem.


Comments

Popular posts from this blog

java - Run spring boot application error: Cannot instantiate interface org.springframework.context.ApplicationListener -

reactjs - React router and this.props.children - how to pass state to this.props.children -

Excel VBA "Microsoft Windows Common Controls 6.0 (SP6)" Location Changes -