我在我的应用程序中使用视图分页器,内部有多个片段,我也使用这些代码禁用了viewpager滑动,但是在我的布局“ fragment_hr_link.xml”中,我可以滑动它,但是卡在了两个片段之间
viewPager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
它在我的某些片段中工作正常,但是,我在此布局上遇到问题,滑动有效,但卡住了
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.hr.HrLinkFragment">
<ScrollView
android:fillViewport="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:padding="15dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:rowCount="3"
android:columnCount="2"
android:alignmentMode="alignMargins"
android:columnOrderPreserved="false">
<androidx.cardview.widget.CardView
android:clickable="true"
android:focusable="true"
android:foreground="?android:attr/selectableItemBackground"
android:id="@+id/card_view_hr_daily_schedule"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
app:cardElevation="6dp"
app:cardCornerRadius="8dp"
android:layout_margin="12dp" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="16dp"
android:orientation="vertical">
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/ic_launcher_foreground"
android:layout_gravity="center" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Daily Schedule"
android:textSize="16sp"
android:textColor="#3253F8"
android:layout_marginTop="12dp"
android:textAlignment="center" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:clickable="true"
android:focusable="true"
android:foreground="?android:attr/selectableItemBackground"
android:id="@+id/card_view_hr_daily_time_record"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
app:cardElevation="6dp"
app:cardCornerRadius="8dp"
android:layout_margin="12dp" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="16dp"
android:orientation="vertical">
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/ic_launcher_foreground"
android:layout_gravity="center" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Daily Time Record"
android:textSize="16sp"
android:textColor="#3253F8"
android:layout_marginTop="12dp"
android:textAlignment="center" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:clickable="true"
android:focusable="true"
android:foreground="?android:attr/selectableItemBackground"
android:id="@+id/card_view_hr_evaluation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
app:cardElevation="6dp"
app:cardCornerRadius="8dp"
android:layout_margin="12dp" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="16dp"
android:orientation="vertical">
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/ic_launcher_foreground"
android:layout_gravity="center" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Evalution"
android:textSize="16sp"
android:textColor="#3253F8"
android:layout_marginTop="12dp"
android:textAlignment="center" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:clickable="true"
android:focusable="true"
android:foreground="?android:attr/selectableItemBackground"
android:id="@+id/card_view_hr_leave_balance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
app:cardElevation="6dp"
app:cardCornerRadius="8dp"
android:layout_margin="12dp" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="16dp"
android:orientation="vertical">
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/ic_launcher_foreground"
android:layout_gravity="center" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Leave Balance"
android:textSize="16sp"
android:textColor="#3253F8"
android:layout_marginTop="12dp"
android:textAlignment="center" />
</LinearLayout>
</androidx.cardview.widget.CardView>
</GridLayout>
</LinearLayout>
</ScrollView>
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
看起来你已经尝试通过重写OnTouchListener
并始终返回true
来禁用ViewPager的滑动功能,这通常能够阻止触摸事件传递给ViewPager。但是,如果在特定的布局(如“fragment_hr_link.xml”)中该方法没有按预期工作,可能是以下原因导致的:
内部可滑动视图冲突:如果你的Fragment布局"fragment_hr_link.xml"中包含其他可滑动的视图(如NestedScrollView、RecyclerView或另一个ViewPager等),这些视图可能捕获了滑动事件,导致与ViewPager的触摸事件处理发生冲突。你需要确保这些内部可滑动视图也正确地处理或消耗掉它们不需要的触摸事件。
Fragment自身的处理逻辑:有可能是你的Fragment内部有代码逻辑干扰了触摸事件的正常传递。检查Fragment的onCreateView
或相关触摸事件监听器,确保没有其他地方意外地消费或改变了触摸事件的行为。
视图层次问题:有时候,视图的层级结构和Z轴顺序可能导致触摸事件被错误的视图接收。确认你的布局文件中没有视图覆盖在ViewPager之上,并且无意中拦截了触摸事件。
自定义ViewPager或其子类:如果你使用的是自定义的ViewPager或者它的某个子类,确保这个类没有覆写触摸事件处理逻辑,从而影响了你的禁用滑动代码的效果。
onTouchEvent
或设置nestedScrollingEnabled
为false
来禁用其滚动功能。// 如果是RecyclerView
recyclerView.setNestedScrollingEnabled(false);
优化Fragment中的触摸事件处理:确保Fragment中没有额外的触摸事件监听器与你的禁用滑动逻辑冲突。
检查视图层次:使用Android Studio的Layout Inspector工具检查运行时的视图层次结构,确认没有其他视图遮挡或干扰ViewPager。
自定义ViewPager检查:如果使用了自定义ViewPager,请仔细审查其源码,确保没有引入新的问题。
如果以上方法都不能解决问题,考虑在调试模式下详细跟踪触摸事件的分发流程,以定位具体哪里出了问题。希望这些建议能帮助到你!