我一直在寻找这个问题的解决方案,因为两天但还没有成功。我已经使用View寻呼机在我的应用程序中显示List视图的详细信息,当刷卡时显示下一个列表项的详细信息。我在视图分页器单项内有水平列表视图的要求。现在我的问题是,当我想要滑动此水平列表视图时,整个View寻呼机项目正在进行Swiped,我还处理了触摸事件,我的水平列表视图禁止浏览寻呼机的滑动动作,但仍然在浏览寻呼机。请帮助我,下面是我的代码
CustomViewPager.Java
import com.devpoint.adapter.HorizontalListView;
import android.content.Context;
import android.graphics.Rect;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class CustomViewPager extends ViewPager {
private boolean scrollDisable = false;
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if(scrollDisable) {
return false;
} else {
return super.onInterceptTouchEvent(ev);
}
}
public void disableScroll() {
scrollDisable = true;
}
public void enableScroll() {
scrollDisable = false;
}
}
这是我查看传呼机项目的单项
details_item.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#FFFFFF" >
<ScrollView
android:id="@+id/scrollviewid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="2dp" >
------------------------
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/cardview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/padding_medium"
android:background="#FFFFFF"
android:clickable="true"
android:orientation="vertical"
android:padding="35dp"
card_view:cardCornerRadius="@dimen/padding_radius" >
<TableRow
android:layout_width="match_parent"
android:layout_height="170dp"
android:background="#FFFFFF"
android:gravity="center_horizontal"
android:orientation="horizontal" >
<com.devpoint.adapter.HorizontalListView
android:id="@+id/gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:columnWidth="60dp"
android:horizontalSpacing="10dp"
android:numColumns="3"
android:padding="10dp"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp" />
</TableRow>
</android.support.v7.widget.CardView>
</ScrollView>
</RelativeLayout>
我处理了水平Listview内部适配器的触摸项
cardview.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View arg0,
MotionEvent ev) {
switch(ev.getAction()) {
case MotionEvent.ACTION_DOWN:
DetailsViewpagerFragment.viewPager.disableScroll();
//enable swiping
scrollview.setEnabled(false);
break;
case MotionEvent.ACTION_MOVE:
DetailsViewpagerFragment.viewPager.disableScroll();
scrollview.setEnabled(false);
break;
case MotionEvent.ACTION_UP:
DetailsViewpagerFragment.viewPager.enableScroll();
scrollview.setEnabled(true);
break;
}
return false;
}
});
注意:我正在使用我的应用程序中的碎片。谢谢你
任何帮助都会非常非常感谢....
答案 0 :(得分:2)
我面临与你相同的问题。我希望现在回答你的问题还为时不晚。我解决这个问题的方式:
// Declare Variables
HorizontalListView listView;
ViewPager viewPager;
ScrollView scrollListView;
我们需要以下变量来解决这个问题。我们可以在Fragment中调用 viewPager 。
listView = (HorizontalListView) findViewById(R.id.your_list_view);
viewPager = (ViewPager) getActivity().findViewById(R.id.pager);
scrollListView = (ScrollView) swipeView.findViewById(R.id.your_scrollview_layout_id);
现在实施 setOnTouchListener :
listView.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
// disable swiping of ViewPager
// disable scrolling of ScrollView
viewPager.requestDisallowInterceptTouchEvent(true);
scrollListView.requestDisallowInterceptTouchEvent(true);
}
return false;
}
});
注意**:
(1)此方法不需要自定义ViewPager类。
(2)禁用ScrollView在HorizontalListView中给我一个更好的滚动性能。
(3)最初我将 setOnTouchListener 实现为HorizontalListView的父布局(就像你所做的那样),但我没有得到所需的结果。在HorizontalListView实现setOnTouchListener之后,它运行良好。
希望它也有助于其他人。 ^^ v
答案 1 :(得分:0)
这是nonSwipeable viewpager的代码...希望它能为你效果
public class NonSwipeableViewPager extends ViewPager {
public NonSwipeableViewPager(Context context) {
super(context);
}
public NonSwipeableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
}