java - How do I get a ViewPager with focus to pass a dispatchKeyEvent() to its children views? -


i have dialog child view of viewpager have setonkeylistener() , setonclicklistener() setup. however, when child view in visible focus (it's dialog on viewpager) on app, listener never gets called on key press. further investigation seems show viewpager won't pass on dispatchkeyevent() if has focus. however, if set onkeylistener on viewpager code:

mviewpager.setonkeylistener(new view.onkeylistener() {     @override     public boolean onkey(view v, int keycode, keyevent event) {         if (event.getaction() == keyevent.action_up             && event.getkeycode() == keyevent.keycode_dpad_center) {              final int childindex = mviewpager.getcurrentitem();             mviewpager.getchildat(childindex).performclick();         }         return false;     } }); 

the explicit click call on child activate onclicklistener. however, shouldn't have that. event should passed down view hierarchy. accepted way deal this? having explicitly call child feels wrong.

apparently intended behavior. in order children receive events, viewpager needs code explicitly handle it. part of seems due how if large list of views given pageviewer, subset actively cached , can have methods called on it. if want children react to, let's say, click, need like:

for(int i=0; i<mviewpager.getchildcount(); i++){     mviewpager.getchildat(i).performclick(); } 

if child views have onclicklistener set, react clicks if view in active viewpager cache. if views has kind of state can changed based on actions (like new drawable appears on click , disappears click) way make view children affected found seems need have controller keeps track of state , sets onpagechangelistener iterates through "active" children views , ensures in proper state.


Comments

Popular posts from this blog

PHP DOM loadHTML() method unusual warning -

python - How to create jsonb index using GIN on SQLAlchemy? -

c# - TransactionScope not rolling back although no complete() is called -