Android 禁止在选项卡之间滑动
我用两个Android 禁止在选项卡之间滑动,android,android-fragments,android-tabs,Android,Android Fragments,Android Tabs,我用两个Fragments设置了滑动选项卡,每个Fragment都有一个按钮,该按钮指向WebView。问题是,当单击WebView按钮时,滑动选项卡仍处于激活状态,当用户尝试在WebView中导航时,您最终会滑动到另一个选项卡。点击方法中是否有办法禁用选项卡的滑动功能?任何帮助都将不胜感激 代码如下: public class MyWebViewClass extends Fragment { private WebView mWebView; private Button mButton;
Fragment
s设置了滑动选项卡,每个Fragment
都有一个按钮,该按钮指向WebView
。问题是,当单击WebView
按钮时,滑动选项卡仍处于激活状态,当用户尝试在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;
}
这个答案可以应用于任何ViewPager,实际上无论您使用什么库来实现选项卡,甚至是不带选项卡的普通ViewPager。
您正在使用的库由一个负责滑动效果的ViewPager支持,您可以通过使用新的或提供自己的自定义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.isPaginEnabled=false将其关闭
不用说,您必须将XML布局更改为新的自定义ViewPager,而不是原来的ViewPager
<androidx.viewpager.widget.ViewPager
...
/>
到
最简单的方法是设置TouchListener
并为ViewPager
返回true
原始答复:
接受答案的AndroidX和Kotlin版本:
始终禁用分页的ViewPager
带分页功能的ViewPager可随时打开或关闭。
最后,在XML文件中找到ViewPager行,并根据您的CustomViewPager位置进行修改,即:
科特林:
正在使用ViewPager2
viewPager.isUserInputEnabled = false
在选项卡之间滑动被禁用,用户仍然可以点击顶部的选项卡在选项卡之间移动
我很确定,无论您使用的是什么LIB,都有这样的功能,但问题是如何或更确切地说什么时候再次启用它…@Selvin是的,我自己认为,我正在使用neokree的MaterialTables,但我找不到任何方法禁用滑动选项卡。这里的链接是ok,而不是使用MaterialTab创建您自己的类,该类扩展了这个类并覆盖了onTouch(…),如下所示bool-onTouch(params){if(someFlag意味着滑动是可访问的){return false;}return super.onTouch(params)}
为这个标志添加一些getter和setter。。。然后使用setter禁用/启用滑动。。。。听起来很简单(但我当然不会为您编写代码——因为在这篇评论中它几乎已经写好了)。。。编辑:正如我之前写的,问题是什么时候再次启用它?非常好的答案非常感谢只有一个问题我不太确定如何在主活动中设置适配器?我有ViewPagerAdapter适配器=新的ViewPagerAdapter(getSupportFragmentManager())代码>我应该将此更改为什么?您不应该更改。有什么我应该更改的吗?您必须将xml布局更改为新的自定义ViewPager,而不是原始的。然后像always一样获取变量,但在CustomViewPager对象中,而不仅仅是ViewPager对象中,然后调用mViewPager.setPaginEnabled(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) {
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)
}
}
viewPager.isUserInputEnabled = false