web-dev-qa-db-fra.com

Désactiver le balayage entre les onglets

J'ai mis en place des onglets coulissants avec deux Fragment chacun Fragment a un Button qui va à un WebView. Le problème est que lorsque vous cliquez sur WebViewButton, les onglets coulissants sont toujours activés et lorsqu'un utilisateur essaie de naviguer dans le WebView vous finissez par glisser vers l'autre onglet . Existe-t-il un moyen dans une méthode au clic pour désactiver la capacité de balayage des onglets? Toute aide serait grandement appréciée!

Voici le 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;
}
36
Darragh O'Flaherty

Cette réponse peut être appliquée à n'importe quel ViewPager, quelle que soit la bibliothèque que vous utilisez pour implémenter les onglets ou même un ViewPager normal sans onglets.

La bibliothèque que vous utilisez neokree/MaterialTabs est accompagnée d'un ViewPager qui est responsable de l'effet de balayage et vous pouvez le désactiver en fournissant votre propre ViewPager personnalisé.

ViewPager avec la pagination désactivée tout le temps

import Android.content.Context;
import Android.support.v4.view.ViewPager;
import Android.util.AttributeSet;
import Android.view.MotionEvent;

public class CustomViewPager extends ViewPager {

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

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return false;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        return false;
    }
}

[~ # ~] ou [~ # ~] ViewPager avec pagination commutable pour l'activer ou le désactiver à tout moment.

import Android.content.Context;
import Android.support.v4.view.ViewPager;
import Android.util.AttributeSet;
import Android.view.MotionEvent;

public class CustomViewPager extends ViewPager {

    private boolean enabled;

    public CustomViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.enabled = true;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return enabled && super.onTouchEvent(event);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        return enabled && super.onInterceptTouchEvent(event);
    }

    public void setPagingEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public boolean isPagingEnabled() {
        return enabled;
    }
}

Cette classe fournit un ViewPager qui est activé par balayage et vous pouvez le désactiver par viewPager.setPagingEnabled(false);

Sans oublier que vous devez modifier la mise en page XML pour votre nouveau ViewPager personnalisé plutôt que celui d'origine.

<Android.support.v4.view.ViewPager 
   ...
   />

à

<my.package.CustomViewPager 
   ...
   />
74
Ahmed Hegazy

La manière la plus simple est de setOnTouchListener et de renvoyer true pour ViewPager.

réponse d'origine: https://stackoverflow.com/a/13392198/429381

2
Reza Nazeri