禁用在选项卡之间滑动

Dar*_*rty 37 android android-fragments android-tabs

我设置了两个Fragments的滑动标签,每个标签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;
}
Run Code Online (Sandbox Code Playgroud)

Ahm*_*azy 76

无论您使用什么库来实现选项卡,甚至是没有选项卡的普通ViewPager,这个答案都可以应用于任何ViewPager.

您使用neokree/MaterialTabs的库由ViewPager支持,该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;
    }
}
Run Code Online (Sandbox Code Playgroud)

或者 ViewPager可以随时打开或关闭分页.

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

此类提供了一个启用了滑动的ViewPager,您可以将其关闭 viewPager.setPagingEnabled(false);

更不用说你必须将XML布局更改为新的自定义ViewPager而不是原始的.

<android.support.v4.view.ViewPager 
   ...
   />
Run Code Online (Sandbox Code Playgroud)

<my.package.CustomViewPager 
   ...
   />
Run Code Online (Sandbox Code Playgroud)

  • 您必须将xml布局更改为新的自定义ViewPager而不是原始的.然后像往常一样获取变量,但在CustomViewPager对象中,不仅仅是ViewPager obj,然后在需要时调用`mViewPager.setPagingEnabled(false);`. (3认同)

Ben*_*Ben 11

科特林:

使用 ViewPager2...

viewPager.isUserInputEnabled = false
Run Code Online (Sandbox Code Playgroud)

在选项卡之间滑动被禁用,用户仍然可以点击顶部的选项卡在选项卡之间切换。

关于 isUserInputEnabled 的文档

  • 最实际、最清晰的解决方案,谢谢! (2认同)