Search code examples
javaandroidhorizontalscrollview

Horizontal Scroll View working unexpectedly


I am trying to create a calculator. I am working in the latest Android Studio. Like in calculators, all new tokes(numbers, operators) should be shown in the right and if the field is larger than the display, it should scroll to the latest token. I have already browsed and found a way to do the same.
The code for the same is:

private void scrollRight() {
    horizontalScrollView = (HorizontalScrollView) findViewById(R.id.horizontalScrollView);
    ViewTreeObserver viewTreeObserver = horizontalScrollView.getViewTreeObserver();
    viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            horizontalScrollView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            horizontalScrollView.scrollTo(entry.getWidth(), 0);
        }
    });
 }

scrollRight is called by a onClick event which checks if a token is entered and calls this.

Everything is working perfectly, i.e. on every new token the scroll bar is scrolling to the end. But if I try to scroll to the beginning manually, it no longer works. After this every time a new token is pressed, the scroll bar first moves to the end and then back to the beginning.
The only option that remains is to restart the program. I tried debugging the OnGlobalLayout function but the debugger loses all frames while stepping out from the function, so it is difficult to know what exactly is making the scroll bar go to the beginning.

GIF to show the problem:
https://i.sstatic.net/gukRy.gif

Please Help!


Solution

  • Try

    horizontalScrollView.post(new Runnable() {
                @Override
                public void run() {
                    horizontalScrollView.fullScroll(View.FOCUS_RIGHT);
                }
            });
    

    And call findViewById only once in onCreate.