Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Disable swiping between tabs

I set up sliding tabs with two Fragments each Fragment has a Button which goes to a WebView. The problem with this is when the WebView Button is clicked the sliding tabs are still activated and when a user tries to navigate within the WebView you end up swiping to the other tab. Is there a way in an on click method to disable the swiping ability of the tabs? Any help would be hugely appreciated!

Here the code:

public class MyWebViewClass extends Fragment {  private WebView mWebView; private Button mButton;  public MyWebViewClass() {     // Required empty public constructor }   @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,                          Bundle savedInstanceState) {     // Inflate the layout for this fragment     View view = inflater.inflate(R.layout.fragment_webview, container, false);      mWebView = (WebView) view.findViewById(R.id.WebView);      mButton = (Button) view.findViewById(R.id.Button1);     mButton.setOnClickListener(new View.OnClickListener() {         @Override         public void onClick(View v) {             mWebView.setVisibility(View.VISIBLE);             mButton.setVisibility(View.GONE);             mWebView.getSettings().setJavaScriptEnabled(true);             mWebView.loadUrl("www.google.com");         }     });      return view; } 
like image 452
Darragh O'Flaherty Avatar asked Feb 13 '15 15:02

Darragh O'Flaherty


People also ask

How do I turn off viewpager2 swipe?

You can easily do that by creating a custom class inherits from viewPager and override two methods: “onTouchEvent()” and “onInterceptTouchEvent()” and return true or false to disable and enable the swiping on certain touch events i.e say swiping.


1 Answers

This answer can be applied to any ViewPager actually no matter what is the library you are using to implement the tabs or even a normal ViewPager without tabs.

The library you are using neokree/MaterialTabs is backed with a ViewPager that is responsible for the swiping effect and you can disable that by using the new ViewPager2 or providing your own custom ViewPager.

import android.annotation.SuppressLint import android.content.Context import android.util.AttributeSet import android.view.MotionEvent import androidx.viewpager.widget.ViewPager  class CustomViewPager(context: Context, attrs: AttributeSet) : ViewPager(context, attrs) {      var isPagingEnabled: Boolean = true      @SuppressLint("ClickableViewAccessibility")     override fun onTouchEvent(event: MotionEvent): Boolean {         return isPagingEnabled && super.onTouchEvent(event)     }      override fun onInterceptTouchEvent(event: MotionEvent): Boolean {         return isPagingEnabled && super.onInterceptTouchEvent(event)     } } 

This class provides a ViewPager that is swiping enabled and you can turn it off by viewPager.isPagingEnabled = false

No to mention that you have to change the XML layout to your new custom ViewPager rather than the original one.

<androidx.viewpager.widget.ViewPager     ...    /> 

to

<my.package.CustomViewPager     ...    /> 
like image 197
Ahmed Hegazy Avatar answered Oct 06 '22 01:10

Ahmed Hegazy