Arrow control soft keyboard

Here I use ViewPager for Fragments, I used a custom pager view to control navigation. here is the class

public class NonSwipeableViewPager extends ViewPager {

public NonSwipeableViewPager(Context context) {
    super(context);
    setMyScroller();
}

public NonSwipeableViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
    setMyScroller();
}

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    // Never allow swiping to switch between pages
    return false;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    // Never allow swiping to switch between pages
    return false;
}

//down one is added for smooth scrolling

private void setMyScroller() {
    try {
        Class<?> viewpager = ViewPager.class;
        Field scroller = viewpager.getDeclaredField("mScroller");
        scroller.setAccessible(true);
        scroller.set(this, new MyScroller(getContext()));
    }catch (Exception e) {
        e.printStackTrace();
    }
}

public class MyScroller extends Scroller {
    public MyScroller(Context context) {
        super(context, new DecelerateInterpolator());
    }

    @Override
    public void startScroll(int startX, int startY, int dx, int dy, int duration) {
        super.startScroll(startX, startY, dx, dy, 350 /*1 secs*/);
    }
}

}

There are no Swipe and Click events. but what is the problem:

imagewhen I select FIRST NAME and press the arrow button on my tablet (Samsung), it will go to the MIDDLE NAME and then the LAST NAME , after the LAST NAVIGATE NAME FOR THE NEXT Fragment i.e. INTRODUCTION to my pager. this is my problem, how to prevent this?

what I tried, I set the EditText property nextFocusForwardand tried

 v.setFocusableInTouchMode(true); 
 v.requestFocus(); 
 v.setOnKeyListener(new View.OnKeyListener() { 
    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
        if (keyCode == KeyEvent.KEYCODE_NAVIGATE_NEXT) {
            return false; 
          } 
      } 
      return false; 
    } 
}); 

! ? ? ( Samsung) . ?

+1
1

, - .

dispatchKeyEvent ( KeyEvent)

@Override public boolean dispatchKeyEvent(KeyEvent event) {

     Log.i("key pressed", String.valueOf(event.getKeyCode()));
     if(event.getKeyCode()==KeyEvent.KEY_A/*select required keycode*/){

        //perform required  task

     }
     return super.dispatchKeyEvent(event); 
}

keyCode, navigation_next.

, .

0

Source: https://habr.com/ru/post/1686425/


All Articles