android-fragments 禁用在选项卡之间滑动

wwwo4jvm  于 2022-11-14  发布在  Android
关注(0)|答案(5)|浏览(172)

我用两个x1m0 n1 s设置了滑动标签,每个Fragment有一个Button,它转到一个WebView。这样做的问题是,当点击WebViewButton时,滑动标签仍然被激活,当用户试图在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;
}
doinxwow

doinxwow1#

这个答案实际上可以应用于任何ViewPager,无论您使用什么库来实现选项卡,甚至是不带选项卡的普通ViewPager。

您正在使用的neokree/MaterialTabs库支持一个ViewPager,它负责滑动效果,您可以通过使用新的ViewPager2或提供您自己的自定义ViewPager来禁用它。

import android.annotation.SuppressLint
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: Boolean = true

    @SuppressLint("ClickableViewAccessibility")
    override fun onTouchEvent(event: MotionEvent): Boolean {
        return isPagingEnabled && super.onTouchEvent(event)
    }

    override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
        return isPagingEnabled && super.onInterceptTouchEvent(event)
    }
}

此类提供了一个启用滑动功能的ViewPager,您可以通过viewPager.isPagingEnabled = false关闭它
更不用说,您必须将XML布局更改为新的自定义ViewPager,而不是原来的布局。

<androidx.viewpager.widget.ViewPager 
   ...
   />

<my.package.CustomViewPager 
   ...
   />
clj7thdc

clj7thdc2#

Kotlin:
正在使用ViewPager2...

viewPager.isUserInputEnabled = false

禁用在选项卡之间滑动,用户仍可以点击顶部的选项卡在选项卡之间切换。
有关isUserInputEnabled的文档

oalqel3c

oalqel3c3#

最简单的方法是对setOnTouchListener执行,然后返回true以得到ViewPager
原始答案:https://stackoverflow.com/a/13392198/4293813

wj8zmpe1

wj8zmpe14#

已接受答案的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位置进行修改,即:

x1月0n1x日

62lalag4

62lalag45#

您可以使用以下代码。

viewpager2.setUserInputEnabled(false);

相关问题