10

Trying to resolve this issue : How to disable pullToRefreshScrollView from listening to touch I am wondering it there is a solution, to block ScrollView from handling onTouchEvents without creating customizable class for it ? Why all the methos like

gridView.getParent().requestDisallowInterceptTouchEvent(true); mScrollView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return false; } }); 

doesn't work ? what's the problem with them ? why Google implements methods which doesn't work ?

1

3 Answers 3

8

Create a custom ScrollView and use it wherever you wants.

class CustomScrollView extends ScrollView { // true if we can scroll the ScrollView // false if we cannot scroll private boolean scrollable = true; public void setScrollingEnabled(boolean scrollable) { this.scrollable = scrollable; } public boolean isScrollable() { return scrollable; } @Override public boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: // if we can scroll pass the event to the superclass if (scrollable) return super.onTouchEvent(ev); // only continue to handle the touch event if scrolling enabled return scrollable; // scrollable is always false at this point default: return super.onTouchEvent(ev); } } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { // Don't do anything with intercepted touch events if // we are not scrollable if (!scrollable) return false; else return super.onInterceptTouchEvent(ev); } } 

This can be use in layout

<com.packagename.CustomScrollView android:id="@+id/scrollView" android:layout_height="fill_parent" android:layout_width="fill_parent"> </com.packagename.CustomScrollView > 

Then invoke

((CustomScrollView )findViewById(R.id.scrollView)).setIsScrollable(false); 
Sign up to request clarification or add additional context in comments.

3 Comments

yes, this works, but as I typed above I am trying to avoid this solutions. Thanks anyway
this.scrollable = scrollable;
The two override methods can be simplified: public boolean onTouchEvent(MotionEvent ev) { return !scrollable ? false : super.onTouchEvent(ev); } and same with onIntercept...
7

Try and see:

 scrollView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub return isBlockedScrollView; } }); 

Comments

1

if you are wanting to disable the SecrollView because it rises by itself when scrolling horizontally in a scroll view that is inside it, make sure there is no EdtiText with focus , because the ScrollView will scroll wherever it has focus.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.