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 WebView
Button
, 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;
}
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é.
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;
}
}
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
...
/>
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