禁用在选项卡之间滑动

时间:2015-02-13 15:59:07

标签: android android-fragments android-tabs

我设置了两个Fragment的滑动标签,每个Fragment都有一个Button WebViewWebView。这样做的问题是,当点击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}}

4 个答案:

答案 0 :(得分:69)

无论您使用什么库来实现标签,甚至是没有标签的普通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;
    }
}

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;
    }
}

此类提供启用了滑动功能的ViewPager,您可以通过viewPager.setPagingEnabled(false);

将其关闭

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

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

<my.package.CustomViewPager 
   ...
   />

答案 1 :(得分:2)

最简单的方法是setOnTouchListener并返回true ViewPager

原始答案: https://stackoverflow.com/a/13392198/4293813

答案 2 :(得分:2)

科特琳:

使用ViewPager2 ...

viewPager.isUserInputEnabled = false

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

Documentation on isUserInputEnabled

答案 3 :(得分:0)

Accepted Answer的AndroidX和Kotlin版本:

一直禁用分页的ViewPager

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
    }
}

带分页功能的ViewPager可随时打开或关闭。

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 ...