我设置了两个Fragment
的滑动标签,每个Fragment
都有一个Button
WebView
。WebView
。这样做的问题是,当点击Button
WebView
时,滑动标签仍处于激活状态,当用户尝试在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;
}
内导航时,您最终会滑动到另一个标签页。在点击方法中是否有一种方法可以禁用选项卡的滑动功能?任何帮助都将非常感激!
这里是代码:
{{1}}
答案 0 :(得分:69)
无论您使用什么库来实现标签,甚至是没有标签的普通ViewPager,这个答案都可以应用于任何ViewPager。
您正在使用的库neokree/MaterialTabs由ViewPager支持,该ViewPager负责滑动效果,您可以通过提供自己的自定义ViewPager来禁用它。
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;
}
}
此类提供启用了滑动功能的ViewPager,您可以通过viewPager.setPagingEnabled(false);
更不用说您必须将XML布局更改为新的自定义ViewPager而不是原始的。
<android.support.v4.view.ViewPager
...
/>
到
<my.package.CustomViewPager
...
/>
答案 1 :(得分:2)
最简单的方法是setOnTouchListener
并返回true
ViewPager
。
答案 2 :(得分:2)
科特琳:
使用ViewPager2 ...
viewPager.isUserInputEnabled = false
标签之间的滑动被禁用,用户仍然可以点击顶部的标签以在标签之间切换。
答案 3 :(得分:0)
package your.packg.name //CustomViewPager's location actually
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) {
override fun onTouchEvent(event: MotionEvent): Boolean {
return false
}
override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
return false
}
}
package your.packg.name //CustomViewPager's location actually
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 = false //Modify this in code for switch
override fun onTouchEvent(event: MotionEvent): Boolean {
return isPagingEnabled && super.onTouchEvent(event)
}
override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
return isPagingEnabled && super.onInterceptTouchEvent(event)
}
}
最后,在 XML 文件中找到ViewPager行,然后根据您的CustomViewPager位置进行修改,即:
<your.packg.name.CustomViewPager ...